我如何才能将RGB的红色数字(0x00ff0000)提高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);
}
}

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

您写这篇文章的方式基本上已经奏效了。问题是,当结果太大,无法容纳红色字段的8位时会发生什么。

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

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

这将工作,但这有点不寻常。通常情况下,执行此操作的代码不会转换为float。

此外,如果您在[00255]中将红色值一直转换为int,则会更容易理解,但在这种情况下没有必要这样做(+10%的工作方式相同(,通常当您编写这样的低级别像素代码时,最好快速完成。

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

//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;

相关内容

  • 没有找到相关文章

最新更新