@ 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;
}

Ответы на вопрос(2)

Ваш ответ на вопрос