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

How to convert HBITMAP to BYTE array for JNI

本文关键字:JNI BYTE 数组 转换 HBITMAP      更新时间:2023-10-16

首先对我的英语不好感到抱歉,你好,我是这种论坛的新手,我遇到的问题很头疼,我仍然在寻找这个页面和其他页面上的所有内容,我找不到解决方案,首先我需要创建一个屏幕截图并将其保存在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

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

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