Référencer How to get IntPtr from byte[] in C#IntPtr à Tableau d'octets et Retour
Je tente de lire les données d'un IntPtr fait référence dans un octet [], puis de nouveau dans un autre IntPtr. Le pointeur fait référence à une image capturée à partir d'un périphérique de scanner. J'ai donc supposé que la capture de cette information devrait être placée dans un tableau d'octets.
Je ne suis pas sûr non plus si la méthode Marshal.SizeOf() retournera la taille des données référencées par IntPtr ou la taille du pointeur lui-même.
Mon problème est que je reçois l'erreur « Type « System.Byte [] » ne peut pas être marshalés comme une structure non gérée, pas de taille significative ou OFFSET peut être calculée »
IntPtr bmpptr = Twain.GlobalLock (hImage);
try
{
byte[] _imageTemp = new byte[Marshal.SizeOf(bmpptr)];
Marshal.Copy(bmpptr, _imageTemp, 0, Marshal.SizeOf(bmpptr));
IntPtr unmanagedPointer = Marshal.AllocHGlobal(
Marshal.SizeOf(_imageTemp));
try
{
Marshal.Copy(_imageTemp, 0, unmanagedPointer,
Marshal.SizeOf(_imageTemp));
Gdip.SaveDIBAs(
string.Format("{0}\\{1}.{2}", CaptureFolder, "Test", "jpg"),
unmanagedPointer, false);
}
finally
{
Marshal.FreeHGlobal(unmanagedPointer);
}
}
catch (Exception e)
{
Scanner.control.Test = e.Message;
}
Pourquoi ne pouvez-vous pas simplement utiliser 'bmpptr' dans l'appel de' Gdip.SaveDIBAs'? – SwDevMan81
C'est ce que fait le code que je modifie aujourd'hui, ce contrôle est utilisé comme contrôle x actif et nous essayons de nous débarrasser du stockage côté client des images. Gdip.SaveDIBAs enregistre l'image sur le stockage local, je veux être en mesure d'envoyer l'octet [] au serveur pour la création d'image. Ce code est ma tentative de prototype de cette fonctionnalité. –
Ok, donc vous voulez juste passer du non-géré 'bmpptr' à un' byte [] '? – SwDevMan81