解释以使几乎白色的像素透明的C代码-HSV颜色模型的值

问题描述 投票:0回答:1

我有以下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);

谢谢您的时间。

c pthreads rgb hsv
1个回答
0
投票

为什么将值乘以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;会成为问题。

© www.soinside.com 2019 - 2024. All rights reserved.