【发布时间】:2018-10-29 05:38:46
【问题描述】:
所以这是我的代码的一部分,我想做的是从 OpenGL 帧捕获中制作 HBITMAP。
unsigned char *output = 0;
output = new unsigned char[WINDOW_WIDTH * WINDOW_HEIGHT * 3];
glReadPixels(0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, GL_RGB, GL_UNSIGNED_BYTE,
output);
HBITMAP hdm = CreateBitmap(800, 800, 1, 32, output);
但我的 (HBITMAP)hdm 始终为 NULL。也许还有另一种方法可以做到这一点或有什么问题?我猜 CreateBitmap 会自己分配内存,所以错误一定不在这里。不过输出数组似乎没问题。
我也尝试过这里的代码:Creating a HBITMAP from glReadPixels,但效果不佳,仍然为 NULL。
不胜感激!
【问题讨论】:
-
由于像素数据的格式是
GL_RGB,所以CreateBitmap的第三个参数应该是24而不是32。否则你必须使用GL_RGBA格式。你调试过代码吗?output收到数据了吗? -
你试过打电话给
GetLastError吗?错误代码是什么? -
Rabbid76,非常感谢,它成功了!是的,输出收到了数据。您的解决方案解决了问题。
-
@joe_chip:在调用CreateBitmap 之后调用
GetLastError返回一个无意义的值。
标签: c++ winapi opengl glreadpixels hbitmap