有关GetImageBuffer函数获得缓冲区颜色有偏差的问题

0

问题的起因在于graphics.h贴图必须要有掩膜图盖住需要贴图不需要显示的部分,而有些背景不是纯黑色的图片,可能是纯红色或者绿色等等。因此我想通过GetImageBuffer来修改背景色为黑色,结果测试时发现,用这个函数得到的值经常会有偏差,例如RGB(0,255,0),用这个函数得到的值有时候会是RGB(1,255,3)这样的值,我用截图工具去看了下图片,原图的颜色并没有问题,就是纯色的。那么getimagebuffer为什么会出现颜色偏差呢,该如何解决这个问题?

代码:

DWORD* psourcepic = GetImageBuffer(&sourcepic);

for (int i = 0; i < width * height; i++)
{
	printf("color[%4d]=%#x\n", i, psourcepic[i]);
}

输出:

color[ 0]=0xff03ff00
color[ 1]=0xff01ff00
color[ 2]=0xff01ff00
color[ 3]=0xff00ff01
color[ 4]=0xff00ff01
ava
阿噗

2020-10-21

1

在图像缓冲区里面存储的数据,就是真实的图像数据我,不会有任何偏差。

你遇到的问题就是图片的问题。jpg 格式的图片是有损压缩,会造成部分像素颜色杂乱。为了验证你的图片问题,你可以在系统自带的画图软件里面打开图片,然后用油漆桶填充试试,油漆桶会填充相同颜色的区域,你会看到有许多颜色无法填充,尤其是不同颜色的交界处。

ava
慢羊羊

2020-10-21

谢谢。确实如你所说,原图是BMP的,没有问题,就是纯色背景,但是我换成了JPG的,就出现了色差。那么这个问题如何解决?以后都用BMP格式的来做?另外如果图片不是纯色背景还有什么好办法吗? -  阿噗  2020-10-22
@阿噗 换成任何无损压缩格式都可以。比如png、gif都是常用的无损压缩格式。 -  慢羊羊  2020-10-22
技术讨论社区