我怎样才能只将 RGB 的红色数字 (0x00ff0000) 提高 10% 之类的值?

How can I only raise the red Numbers (0x00ff0000) of RGB by a value like 10%?

class TestFilter extends RGBImageFilter {

    public int filterRGB(int x, int y, int pixel) { //0xffffffff
        

        float redfilteredPixel;
        int restPixel;

        redfilteredPixel = (pixel & 0x00ff0000); //red pixel
        restPixel = (pixel & 0xff00ffff); //"restpixel"

        redfilteredPixel *= 1.1f;

        int redpixel = (int) redfilteredPixel & 0x00ff0000;
        
        return (redpixel | restPixel);
    }
}

这是一个学校项目,但我应该只更改方法的中间部分。

在我的脑海里,它应该是这样的:

//shift the bytes to only get the red value as a numerical value
int redValue = redfilteredPixel >> 16;
redValue *= 1.1f;
//make sure it doesnt exceed 255 after the multiplication
redValue = Math.min(255, redValue);
//shift the bytes back to the correct place
redfilteredPixel = redValue << 16;

你写这篇文章的方式已经很管用了。问题是当结果太大而无法放入红色字段的 8 位时会发生什么。

您可以在转换回 int 后添加一个检查,如下所示:

    int redpixel = (int) redfilteredPixel & 0x00ff0000;
    if (redpixel > 0x00FF0000)
        redpixel = 0x00FF0000;

这会 有效 ,但有点不寻常。通常执行此操作的代码不会转换为浮点数。

此外,如果将红色值一直转换为 [0,255] 中的 int 会更容易理解,但在这种情况下没有必要这样做(+10% 也一样)方式),通常当你像这样编写低级像素代码时,最好以快速方式进行。