glReadPixels с пикселями экрана

Я пытаюсь прочитать значение 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

Что я делаю неправильно?

-1

Решение

Как уже упоминалось в другом ответе и комментариях, вы можете использовать glReadPixels только для пикселей внутри вашего OpenGL контекстное окно, которое фактически отображается в то время … Как вы уже упоминали, вы использовали GetPixel это намекает на то, что вы используете GDI. В этом случае вы пытаетесь прочитать GDI Canvas пиксель от OpenGL что невозможно (возможно, но наоборот), но медленно. Поэтому я советую прочитать это:

Где вы можете найти пример обоих методов. Если вы пытаетесь получить пиксель из вашего собственного приложения, тогда вы можете использовать разные API, то GetPixel,

Если вы в VCL использование среды Графика :: TBitmap :: ScanLine свойство, которое можно использовать для прямого доступа к пикселям без ограничений или падений производительности при правильном использовании.

На MSVC ++ из НКУ использование среды WinAPI BitBlt но это немного медленнее и не так элегантно (по крайней мере, с моей точки зрения).

0

Другие решения

glReadPixels() не будет работать без текущего контекста GL. Хотя, даже если вы сделал иметь текущий контекст вы не можете прочитать системный фреймбуфер таким образом.

1

По вопросам рекламы [email protected]