我有以下C代码使几乎白色的像素透明,但是我很难理解为什么值乘以255。能否告诉我为什么?
指针鱼指向内存中的位图;该位图几乎具有白色像素;而是fishp是一个指针,它指向我要存储新位图的内存部分。
int x, y, c;
int pink;
float hue, sat, val;
for (x = 0; x < fish - > w; x++)
for (y = 0; y < fish - > h; y++) {
c = getpixel(fish, x, y);
rgb_to_hsv(getr(c), getg(c), getb(c), &
hue, & sat, & val);
val = val * 255;
if (val >= 240) c = pink;
putpixel(fishp, x, y, c);
}
get_palette(pal);
save_bitmap("fishp.bmp", fishp, pal);
谢谢您的时间。
为什么将值乘以255?
在HSV模型中,V
部分的值的数值在[0.0 ... 1.0]范围内。
[由于许多RGB模型使用具有[0 ... 255]范围内的整数值的基数,按255进行缩放只会使value进入与240进行比较之前的范围内。
或者,类似的(可能更快的)比较,代码可能如下所示。
rgb_to_hsv(getr(c), getg(c), getb(c), &hue, & sat, & val);
// val = val * 255;
// if (val >= 240) c = pink;
if (val >= 240/255.0f) c = pink;
关键是240
的阈值水平表示RGB模型,因此比较以这些单位进行。
注意:pink
从未分配值,因此代码需要工作,否则if (val >= 240) c = pink;
会成为问题。