Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C:为什么在我的程序中输出的数字不在标准RGB范围:0-255?_C_Linux_Colors - Fatal编程技术网

C:为什么在我的程序中输出的数字不在标准RGB范围:0-255?

C:为什么在我的程序中输出的数字不在标准RGB范围:0-255?,c,linux,colors,C,Linux,Colors,我只掌握了C语言的基本知识,就编写了以下代码,并在Linux Mint 19上使用这些代码进行编译: gcc-7 -o getPixelColor getPixelColor.c -L/usr/X11/lib -lX11 并无条件地执行: ./getPixelColor #包括 #包括 #包括 无效获取像素颜色(显示*d、int x、int y、XColor*颜色) { XImage*图像; image=XGetImage(d,根窗口(d,默认屏幕(d)),x,y,1,1,所有平面,XYP

我只掌握了C语言的基本知识,就编写了以下代码,并在Linux Mint 19上使用这些代码进行编译:

gcc-7 -o getPixelColor getPixelColor.c -L/usr/X11/lib -lX11
并无条件地执行:

./getPixelColor

#包括
#包括
#包括
无效获取像素颜色(显示*d、int x、int y、XColor*颜色)
{
XImage*图像;
image=XGetImage(d,根窗口(d,默认屏幕(d)),x,y,1,1,所有平面,XYPixmap);
颜色->像素=XGetPixel(图像,0,0);
XFree(图像);
XQueryColor(d,DefaultColormap(d,DefaultScreen(d)),颜色);
}
int main(int argc,char const*argv[]
{
显示*disp=XOpenDisplay(“:0”);
XColor像素_颜色;
获取像素颜色(显示、0、0和像素颜色);
printf(“%d%d%d\n”,pixel\u color.red,pixel\u color.green,pixel\u color.blue);
返回0;
}

问题:

我不知道为什么输出数字不在标准RGB范围内:0-255

当前输出示例(取自桌面图片[0,0]):

7683844097
预期输出(使用Wine运行的Windows颜色选择器获取):

293226


我知道我需要将这些值转换为标准范围,你能建议公式吗?

结构将RGB值存储在0到65535的范围内。可能有现代显示器,其颜色比默认范围更多。对于显示,这是缩小到适当的范围,这也是您应该做的

有关更多信息,请参阅。

来自:

红色、绿色和蓝色值始终在0到65535的范围内,与显示硬件中实际使用的位数无关。服务器将这些值缩小到硬件使用的范围。黑色由(0,0,0)表示,白色由(655356553565535)表示

你应该能够通过除法将它们缩小。e、 g

printf("%d %d %d\n", pixel_color.red/256, pixel_color.green/256, pixel_color.blue/256);

XColor
的定义是
无符号短红色、绿色、蓝色
。。尝试使用
%hu
而不是
%d
来帮助调试:确保
获取像素颜色()
成功并初始化
像素颜色
。十六进制输出往往比十进制更能提供信息。正确的除数是
(唯一输入值的数量)/(唯一输出值的数量)
=
(65535-0+1)/(255-0+1)
=
65536/256
=
256
,而不是257。@Vlastimil:我建议你接受这个答案;毕竟,越来越白痴的人提到除数257只是一个例子。我的评论是要指出,为了统一地缩放范围,你应该使用正确的除数;所以,实际上只是一个附加说明,关于如何选择一个除数来满足他们的特殊需要。