如何将HBITMAP转换为JNI的BYTE数组

时间:2011-06-24 02:45:57

标签: c++ winapi gdi+

首先抱歉我的英语不好,你好我是这类论坛的新人,我的问题很头疼,我还在寻找这个页面和其他的每一个,我不能没找到解决方案,首先我需要创建一个屏幕截图并将其保存在一个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;

}

好吧,这段代码如果用于练习,我尝试使用GDI +中的Image类以及Bitmap但是我找不到将其保存在字节数组中的方法,在某些页面中使用IStream说话但对我来说很难理解它,我需要有人以正确的方式指导我,事先感谢你的帮助:D

1 个答案:

答案 0 :(得分:1)

您在寻找GetDIBits吗?将依赖位图转换为DIB,然后将其流式传输到数组或文件或任何您想要的位置。

有几个图像库可以帮助提供想法。 CxImageFreeImage,都具有将HBITMAP(DDB和DIB)转换为流o字节的功能。