Java中的ColorInvert图像过滤器是如何工作的?
我试着写作业,我的代码也能正常工作,问题是我不明白为什么。 我必须用Java创建一个图像过滤器,它可以反转颜色。 你能用简单的话向我解释一下下面的代码是做什么的吗?更具体地说,这一行:Java中的ColorInvert图像过滤器是如何工作的?,java,filter,Java,Filter,我试着写作业,我的代码也能正常工作,问题是我不明白为什么。 我必须用Java创建一个图像过滤器,它可以反转颜色。 你能用简单的话向我解释一下下面的代码是做什么的吗?更具体地说,这一行: int neu = (p) ^ 0x00FFFFFF; 为什么我需要“^” 。。。。。 还有其他的,这样你就能明白我想做什么 public void filterInvert(){ for(int x = 1; x < w; x++){ for(int y = 1; y<h
int neu = (p) ^ 0x00FFFFFF;
为什么我需要“^”
。。。。。
还有其他的,这样你就能明白我想做什么
public void filterInvert(){
for(int x = 1; x < w; x++){
for(int y = 1; y<h; y++){
int p = filteredImage.getRGB(x, y);
int neu = (p) ^ 0x00FFFFFF;
filteredImage.setRGB(x, y, neu);
}
}
}
public void filterivert(){
对于(int x=1;x 对于(int y=1;yIT是位元异或运算符(更多关于运算符)),在OR之后得到0x0FFFFFF掩码(alpha,r,g,b),所以想象一下,作为最大值,在溢出之后,或者从最大值中返回剩下的东西。让我们举一个简单的例子:0xFF(255)。对于灰度图像来说,最大值就是你的最大值。例如,如果你有一个值为32的像素,你想得到该像素的负数,你可以从最大值(255)中减去32:223……(255-32)=32^255,但最酷的事情是逐位运算往往更快(CPU通常喜欢处理字节),但您也不必担心将颜色分成r、g、b通道,从255(最大值)中减去每个通道要得到负数并将通道放回十六进制表示形式…只需对最大值使用“^”,即可一次性在二进制级别处理此问题。如果计算机上有计算器应用程序,请切换到“程序员”视图,以便查看字节的变化。HTH