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);
}
}
这是一个学校项目,但我应该只改变方法的中间部分。
2条答案
按热度按时间jgwigjjp1#
你写这篇文章的方式已经很有效了。问题是当结果太大,无法放入红色字段的8位时会发生什么。
您可以在转换回int后添加一个检查,如下所示:
那会管用的,但有点不寻常。通常情况下,执行此操作的代码不会转换为float。
此外,如果在[0255]中将红色值一直转换为int,则更容易理解,但在这种情况下,没有必要这样做(+10%的工作方式与此相同),通常在编写类似的低级像素代码时,最好以快速方式进行。
bybem2ql2#
在我脑子里,应该是这样的: