gpt4 book ai didi

c++ - glDrawPixels 输出一些不完全符合预期 RGB 值的像素

转载 作者:太空宇宙 更新时间:2023-11-04 12:08:29 24 4
gpt4 key购买 nike

我目前正在使用 OpenGL 开发适用于 Windows 的视频播放器。效果很好,但我的主要目标之一是准确性。也就是说,显示的图像应该与保存为视频的图像完全相同。

去掉所有与视频/文件/输入相关的东西,我有一些类似我的 glutDisplayFunc 的东西:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
GLubyte frame[256*128*4]; // width*height*RGBA_size
for (int i=0;i<256*128;i++)
{
frame[i*4] = 0x00; // R
frame[i*4+1] = 0xAA; // G
frame[i*4+2] = 0x00; // B
frame[i*4+3] = 0x00; // A
}
glRasterPos2i(0,0);
glDrawPixels(256,128,GL_RGBA,GL_UNSIGNED_BYTE,frame);
glutSwapBuffers();

结合代码过剩..

glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(256, 128);
glutCreateWindow("...");
glutDisplayFunc(Render);
glPixelZoom(1,-1); // use top-to-bottom display
glEnable(GL_DEPTH_TEST);
glutMainLoop();

这非常简单,并且极大地简化了实际代码。使用 glDrawPixels 创建并绘制具有 RGB 值 #00AA00 的帧。正如预期的那样,输出是一个绿色窗口。乍一看,一切似乎都很好。

但是当我使用诸如 http://instant-eyedropper.com/ 之类的工具时要知道像素的确切 RGB 值,我意识到并非所有像素都显示为 #00AA00。某些像素的值为 #00A900。这将是左上角第一个像素的情况,以及同一行上的第 3 个、第 5 个等像素以及每条不均匀的行。

现在,使用 Instant Eyedropper 或 Windows 不会有问题,因为其他程序会为同一文件输出正确的颜色。

现在我的问题是:glDrawPixels 是否有可能以某种方式改变像素值,也许是为了加快速度?我希望这样的函数能够准确显示我们在其中输入的内容,所以我不太确定该如何看待它。

最佳答案

默认情况下,OpenGL 已启用颜色抖动。因此,您的 GPU 实际上可能出于某种原因执行颜色抖动。尝试使用 glDisable(GL_DITHER); 禁用它。还要注意颜色管理问题。

关于c++ - glDrawPixels 输出一些不完全符合预期 RGB 值的像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10900425/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com