我正在尝试读取屏幕像素的RGB值:
#include "stdafx.h"
#include<windows.h>
#include<stdio.h>
#include <gl\GL.h>
int main(int argc, char** argv)
{
GLubyte color[3];
glReadPixels(800, 800, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, &color);
printf("R:%d G:%d B:%d", color[0], color[1], color[2]);
while (1);
}
但我要求的坐标无关紧要。它总是让我回复R:204 G:204 B:204
我做错了什么?
答案 0 :(得分:1)
glReadPixels()
将无效。即使你确实有当前的上下文you can't read the system framebuffer that way。
答案 1 :(得分:0)
正如其他答案和评论中所述,您只能对{strong> OpenGL 上下文窗口中当时实际呈现的像素使用glReadPixels
...正如您所提到的,您已经使用过GetPixel
它暗示您正在使用 GDI 。在这种情况下,您尝试从 OpenGL 读取 GDI Canvas 像素,这是不可能的(反过来可能但反过来却很慢)。所以我建议阅读这个:
在哪里可以找到两种方法的示例。如果您尝试从自己的应用中获取像素,则可以使用不同的api,然后使用GetPixel
。
如果您位于 VCL 环境中,请使用Graphics::TBitmap::ScanLine属性,如果使用得当,该属性可用于直接像素访问而不受限制或性能命中。
在 GCC 环境的 MSVC ++ 上使用 WinAPI BitBlt
但这有点慢而且不那么优雅(至少来自我的观点)。