gpt4 book ai didi

java - RGB channel 之间切换

转载 作者:行者123 更新时间:2023-12-01 22:58:33 25 4
gpt4 key购买 nike

我需要打开/关闭图像的 RGB channel ,但我陷入困境,而且我的代码有错误。

你能帮我弄清楚如何正确地做到这一点吗?这是我的代码:

当 3 个复选框中的 1 个更改其状态并提供 true == selected 参数时,调用函数 channel

public void channels(boolean red, boolean green, boolean blue) {
if (this.img != null) {// checks if the image is set
char r = 0xFF, g = 0xFF, b = 0xFF;
if (red == false) {
r = 0x00;
}
if (green == false) {
g = 0x00;
}
if (blue == false) {
b = 0x00;
}
BufferedImage tmp = new BufferedImage(
img.getWidth(),
img.getHeight(),
BufferedImage.TYPE_INT_RGB);
for (int i = 0; i < img.getWidth(); i++) {
for (int j = 0; j < img.getHeight(); j++) {
int rgb = img.getRGB(i, j);
int red = (rgb >> 16) & r;
int green = (rgb >> 8) & g;
int blue = (rgb >> 0) & b;
int gbr = (red << 16) | (green << 8) | blue;// EDITED
tmp.setRGB(i, j, gbr);
}
}
img = tmp;
repaint();
} else {
//show error
}
}

感谢您的帮助!

最佳答案

这个优化版本怎么样,位移位少了很多?

public void channels(boolean showRed, boolean showGreen, boolean showBlue) {
if (this.origImg!= null) {// checks if the image is set
int channelMask = 0xff << 24 | (showRed ? 0xff : 0) << 16 | (showGreen ? 0xff : 0) << 8 | (showBlue ? 0xff : 0);

BufferedImage tmp = new BufferedImage(origImg.getWidth(), origImg.getHeight(), BufferedImage.TYPE_INT_RGB);

for (int i = 0; i < origImg.getWidth(); i++) {
for (int j = 0; j < origImg.getHeight(); j++) {
int rgb = origImg.getRGB(i, j);
tmp.setRGB(i, j, rgb & channelMask);
}
}

img = tmp;
repaint();
} else {
//show error
}
}

更快的方法可能是使用 channel Raster,或者至少使用允许波段子采样的Raster配置(请参阅Raster. createChild(...) 方法,尤其是最后一个参数)。

LookupOp,正如 @trashgod 提到的,也是一个好主意,并且可能比 getRGB()/setRGB() 方法更快。

关于java - RGB channel 之间切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23690425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com