Я пытаюсь прочитать значение 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
Что я делаю неправильно?
Как уже упоминалось в другом ответе и комментариях, вы можете использовать glReadPixels
только для пикселей внутри вашего OpenGL контекстное окно, которое фактически отображается в то время … Как вы уже упоминали, вы использовали GetPixel
это намекает на то, что вы используете GDI. В этом случае вы пытаетесь прочитать GDI Canvas пиксель от OpenGL что невозможно (возможно, но наоборот), но медленно. Поэтому я советую прочитать это:
Где вы можете найти пример обоих методов. Если вы пытаетесь получить пиксель из вашего собственного приложения, тогда вы можете использовать разные API, то GetPixel
,
Если вы в VCL использование среды Графика :: TBitmap :: ScanLine свойство, которое можно использовать для прямого доступа к пикселям без ограничений или падений производительности при правильном использовании.
На MSVC ++ из НКУ использование среды WinAPI BitBlt
но это немного медленнее и не так элегантно (по крайней мере, с моей точки зрения).
glReadPixels()
не будет работать без текущего контекста GL. Хотя, даже если вы сделал иметь текущий контекст вы не можете прочитать системный фреймбуфер таким образом.