Как преобразовать HBITMAP в массив BYTE для JNI - PullRequest
1 голос
/ 24 июня 2011

прежде всего извините за мой плохой английский, Здравствуйте, я новичок в этом форуме, у меня вопрос, это головная боль, ну, я все еще ищу всех на этой странице и других, я не могу найти решение сначала мне нужно создать снимок экрана и сохранить его в байтовом массиве jpeg, мой код прост и создать HBITMAP, но проблема в том, чтобы преобразовать его в массив, вот мой код:

int takeScreenShoot(){
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

HDC screenDC,memDC;
HBITMAP screenBITMAP;
screenDC= GetDC(NULL);
memDC= CreateCompatibleDC(screenDC);
int Height = GetSystemMetrics(SM_CYSCREEN);
int Width = GetSystemMetrics(SM_CXSCREEN);
screenBITMAP = CreateCompatibleBitmap(screenDC,Width,Height);
BitBlt(memDC,0,0,Width,Height,screenDC,0,0,SRCCOPY);

/*
  use GDIplus for transform the image to JPEG and pass to a byte stream
  or somethig like that
*/
ReleaseDC(NULL,memDC);
ReleaseDC(NULL,screenDC);

return 0;

}

хорошо, этот код, если для практики я пытаюсь использовать класс Image из GDI +, а также Bitmap, но я не нахожу способ сохранить его в байтовом массиве, на некоторых страницах говорят об использовании IStream, но мне сложно понимаю, мне нужен кто-то, чтобы правильно направить меня, заранее спасибо за помощь: D

1 Ответ

1 голос
/ 25 июня 2011

Вы ищете GetDIBits ? Преобразуйте зависимое растровое изображение в DIB , а затем передайте его в массив, файл или что угодно.

Существует несколько библиотек изображений, которые также могут помочь с идеями. CxImage , FreeImage , все имеют функции для преобразования HBITMAP (как DDB, так и DIB) в потоковые байты.

...