我怎样才能只将 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% 也一样)方式),通常当你像这样编写低级像素代码时,最好以快速方式进行。
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% 也一样)方式),通常当你像这样编写低级像素代码时,最好以快速方式进行。