带有屏幕像素的 glReadPixels
glReadPixels with screen pixels
我正在尝试读取屏幕像素的 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);
}
但我要求哪个坐标并不重要。它总是returns我R:204G:204B:204
我做错了什么?
如果没有当前的 GL 上下文,glReadPixels()
将无法工作。虽然即使你 做过 有当前上下文 .
如其他答案和评论中所述,您只能对 OpenGL 上下文 window 中当时实际呈现的像素使用 glReadPixels
...正如您提到的,您使用了 GetPixel
,它暗示您正在使用 GDI。在那种情况下,您试图从 OpenGL 读取 GDI Canvas 像素,这是不可能的(但反过来也是可能的,但是减缓)。所以我建议阅读这个:
在哪里可以找到这两种方法的示例。如果您尝试从自己的应用程序获取像素,那么您可以使用不同的 api 然后 GetPixel
.
如果您在 VCL 环境中,请使用 Graphics::TBitmap::ScanLine 属性,如果使用得当,它可用于无限制或性能下降的直接像素访问。
在 MSVC++ of GCC 环境中使用 WinAPI BitBlt
但那是有点慢而且不那么优雅(至少从我的角度来看)。
我正在尝试读取屏幕像素的 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);
}
但我要求哪个坐标并不重要。它总是returns我R:204G:204B:204
我做错了什么?
glReadPixels()
将无法工作。虽然即使你 做过 有当前上下文
如其他答案和评论中所述,您只能对 OpenGL 上下文 window 中当时实际呈现的像素使用 glReadPixels
...正如您提到的,您使用了 GetPixel
,它暗示您正在使用 GDI。在那种情况下,您试图从 OpenGL 读取 GDI Canvas 像素,这是不可能的(但反过来也是可能的,但是减缓)。所以我建议阅读这个:
在哪里可以找到这两种方法的示例。如果您尝试从自己的应用程序获取像素,那么您可以使用不同的 api 然后 GetPixel
.
如果您在 VCL 环境中,请使用 Graphics::TBitmap::ScanLine 属性,如果使用得当,它可用于无限制或性能下降的直接像素访问。
在 MSVC++ of GCC 环境中使用 WinAPI BitBlt
但那是有点慢而且不那么优雅(至少从我的角度来看)。