如何将HBITMAP转换为JNI的BYTE数组
How to convert HBITMAP to BYTE array for JNI
首先对我的英语不好感到抱歉,你好,我是这种论坛的新手,我遇到的问题很头疼,我仍然在寻找这个页面和其他页面上的所有内容,我找不到解决方案,首先我需要创建一个屏幕截图并将其保存在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)转换为流字节的功能。
相关文章:
- 通过JNI传递数据数组的最快方法是什么
- 如何在 c++ 非托管代码中反序列化 byte[] 的 json 字符串?
- 为 NewObjectA() 函数创建 jvalues 的参数数组时出错 - JNI Invocation API
- 将 C# DLL 导入 C++ 以用于 JNI
- 用C++包装 Java 库 (JNI)
- std::byte 指针应该用于指针算术吗?
- 如何通过 JNI 将 C 字符串表情符号传递给 Java
- JNI从Android调用C++方法
- 在C++中,如何在变量中正确存储 BYTE 类型?
- JVM 如何执行 JNI
- React Native (Android):无法通过 JNI 在 jobject 中返回字符串
- C++如何将字符数组转换为字节向量(向量<byte>)
- 在 Eclipse 上启用 C++17 以使用 'std::byte'
- FreeFileSync C++错误:'byte'不是 'std' 的成员
- 如何将字符串数组返回到 java JNI
- JNI Java包装:如何传递byte[]参数
- 如何在不产生 JNI 问题的情况下转换 byte[] -> uint8_t[]?
- 如何将 ArrayList<byte[]> 转换为 JNI 的 vector<char[]>?
- Android & JNI 如何将 Byte[] 数据数组传递给 JNI 并取回 Byte []
- 如何将HBITMAP转换为JNI的BYTE数组