@ Scruffy, тогда тот же подход должен применяться. Ваша проблема заключается в определении размера буфера. Marshal.SizeOf не будет работать, вам нужно получить эту информацию из twain API.
зкаКак получить IntPtr из байта [] в C #
Я пытаюсь прочитать данные, на которые ссылается 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;
}