Создание и сохранение растрового изображения из IntPtr С#

В моем приложении я сканирую изображение с устройства TWAIN, затем мне нужно сохранить это изображение на локальный диск. Все, что у меня есть, это IntPtr, который ссылается на массив байтовых данных изображения. Как я могу создать объект Bitmap, используя значение IntPtr? Я пробовал с:

Bitmap _img = new Bitmap(2450, 2450, 2452, PixelFormat.Format8bppIndexed, pixptr);
_img.Save("c:\\1.Jpeg", System.Drawing.Imaging.ImageFormat.Jpeg);

Это сохраняет изображение, но изображение никогда не совпадает с тем, которое я отсканировал. Любая помощь?


person Lucas Lima    schedule 12.09.2013    source источник
comment
Вы уверены, что указанные вами размеры и формат пикселей верны для растрового изображения?   -  person Dmitry Brant    schedule 12.09.2013
comment
Вы уверены, что третий параметр Bitmap ctor правильный?   -  person Hamlet Hakobyan    schedule 12.09.2013
comment
На самом деле нет. Я пробовал с этими значениями, а также с более высокими и более низкими значениями, но я получил тот же результат: изображение с одной линией, а не то, которое я отсканировал. Я ПРЕДПОЛАГАЮ, что это что-то связанное с IntPtr.   -  person Lucas Lima    schedule 12.09.2013
comment
Я получаю IntPtr из этой функции TWAIN: DSixfer(appid, srcds, TwDG.Image, TwDAT.ImageNativeXfer, TwMSG.Get, ref hbitmap); Где hbitmap ссылается на массив байтовых данных.   -  person Lucas Lima    schedule 12.09.2013
comment
@HansPassant TWAIN — это стандартный интерфейс, и каждое средство просмотра изображений использует его, поэтому должен быть способ получить это изображение.   -  person Csaba Toth    schedule 12.09.2013
comment
Этот hbitmap является дескриптором растрового изображения, а не указателем на пиксельные данные. Вместо этого используйте Image.FromHbitmap().   -  person Hans Passant    schedule 12.09.2013
comment
Хм, кажется, хотя TWAIN является стандартным, он может создавать странные вещи: посмотрите на этого парня, который в итоге использовал cygwin и SANE: stackoverflow.com/questions/13357297/   -  person Csaba Toth    schedule 13.09.2013
comment
Кроме того, будучи HBITMAP, я думаю, вы можете рассматривать его как DIB, независимое от устройства растровое изображение. Который имеет другую структуру памяти и формат, чем растровый формат file. Раздел заголовка отличается в некоторых местах, потому что он не зависит от устройства.   -  person Csaba Toth    schedule 13.09.2013
comment
если вы просто хотите сохранить растровое изображение, вы можете импортировать gdiplus.dll и использовать метод GdipSaveImageToFile. Это удобнее.   -  person yushulx    schedule 14.10.2013
comment
IntPtr относится к DIB, который необходимо отобразить как растровое изображение. Посмотрите на класс BitmapRenderer по адресу github.com/tmyroadctfig/ twaindotnet/blob/master/src/TwainDotNet/   -  person swandog    schedule 21.11.2013
comment
Вы уверены, что у вас правильный шаг? А разве не должно быть 2450?   -  person Alex Lapa    schedule 18.12.2013