IntPtrが参照しているデータをバイト[]に読み込んでから、別のIntPtrに戻そうとしています。ポインターはスキャナーデバイスからキャプチャされた画像を参照しているため、この情報のキャプチャはバイト配列に配置する必要があると仮定しました。
また、Marshal.SizeOf()メソッドが、IntPtrが参照しているデータのサイズを返すのか、ポインター自体のサイズを返すのかはわかりません。
私の問題は、「タイプ'System.Byte[]'をアンマネージ構造としてマーシャリングできません。意味のあるサイズまたはオフセットを計算できません」というエラーが表示されることです。
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;
}