преобразование HBITMAP в байтовый массив - PullRequest
3 голосов
/ 09 ноября 2010

Я работаю с некоторым сканером API, который возвращает РУЧКУ к изображению в формате BMP (так сказано в документации).Я пытаюсь как-то получить BITMAP из этого дескриптора, но, например, этот код не работает:

HANDLE handle = getHandleFromScanner();
BITMAP bitmap;
int u = GetObject(handle, sizeof(BITMAP), &bitmap);

u здесь 0, а getLastError () возвращает 6, что означает, что дескриптор недопустимНо я не могу получить никакой другой дескриптор, кроме как через getHandleFromScanner() функцию.

Может быть, некоторые преобразования должны быть сделаны с этим дескриптором?есть идеи?Как правильно работать с растровыми маркерами?Или любой простой API существует?Образцы, которые я нашел через Google, не помогли мне.

Большое спасибо.

Ответы [ 2 ]

2 голосов
/ 09 ноября 2010

Вы пробовали GetDIBits()? Это должно работать, но вам также понадобится контекст устройства. Вы можете всегда хотеть вызвать GetObjectType() на дескрипторе, чтобы увидеть, действительно ли он возвращает HBITMAP.

1 голос
/ 10 ноября 2010

Спасибо, ребята.

Ручкой, по-видимому, было само изображение, поэтому следующий код решил эту проблему:

char* pImage = NULL;
HANDLE hImage= getHandleFromScanner();
pImage = (char *)GlobalLock(hImage);
// pImage now contains the bytes of the image

Если кому-то это понадобится, сканер является сканером Olivetti PR2 plus.

...