关于图象过滤的问题?一定给分!!!!!

时间:2022-05-13 08:58:28
class GrayFilter extends RGBImageFilter
{
public GrayFilter()
{
this.canFilterIndexColorModel = true;
}

public int filterRGB(int x,int y,int rgb)
{
int alpha,r,g,b;
int gray;
alpha = rgb & (0xFF << 24);
r = (rgb >> 16) & 0xFF;
g = (rgb >> 8) & 0xFF;
b = (rgb >> 0) & 0xFF;
gray = (r + g + b) / 3;
return alpha | gray << 16 | gray << 8 | gray;
}
}
哪位大哥解释一下这个过滤类的原理,尤其是filterrgb()中的那一段>>和&,不是很懂的说。另外,谁了解imageproduce和imagecomsumer模式和observer和observable也请谈谈好吗?

3 个解决方案

#1


看上去这一段很简单呀?
作用是从传入的一个RGB颜色值转换成一个相应的灰度值吧。
传入的变量rgb的四个字节组成应该是:(每项一字节,从高到低)
alpha(24-31) 好象是亮度,又或者是对比度,光度?全忘了,还给老师了。 :)
R(16-23) 红色 G(8-15) 绿色 B(0-7)蓝色

alpha = rgb & (0xFF << 24);  // 保留传入处理颜色的alpha值 24-31位,0xFF 就是8位1,24-31位向右移位24位到0-7位,用8位1将其余位去掉
r = (rgb >> 16) & 0xFF; // 从传入颜色取出对应红色的值,16-23位到低8位要右移16位
g = (rgb >> 8) & 0xFF; // 从传入颜色取出对应绿色的值,8-15位到低8位要右移8位
b = (rgb >> 0) & 0xFF; // 从传入颜色取出对应蓝色的值 0-7位不需移位

gray = (r + g + b) / 3; //每一色彩项的值,加起来除3就是对应的灰度值。

return alpha &brvbar; gray << 16 &brvbar; gray << 8 &brvbar; gray;  
//保留alpha值,注意到 r, g, b 每一项都不大于 0xff, gray 也不大于0xff,因此 gray 只有后8位有效,其余位为零。
// 因此实际上 gray << 16 &brvbar; gray <<8 &brvbar; gray 相当于低位三个字节值均相同,再加上alpha值
// 从RGB色彩的含义来说,这个返回值代表的色彩就是一个有alpha值的纯灰度值。


#2


to:luodi(无知者无畏):
谢谢指点!!!
另外能说说java中ColorModel的应用吗?

#1


看上去这一段很简单呀?
作用是从传入的一个RGB颜色值转换成一个相应的灰度值吧。
传入的变量rgb的四个字节组成应该是:(每项一字节,从高到低)
alpha(24-31) 好象是亮度,又或者是对比度,光度?全忘了,还给老师了。 :)
R(16-23) 红色 G(8-15) 绿色 B(0-7)蓝色

alpha = rgb & (0xFF << 24);  // 保留传入处理颜色的alpha值 24-31位,0xFF 就是8位1,24-31位向右移位24位到0-7位,用8位1将其余位去掉
r = (rgb >> 16) & 0xFF; // 从传入颜色取出对应红色的值,16-23位到低8位要右移16位
g = (rgb >> 8) & 0xFF; // 从传入颜色取出对应绿色的值,8-15位到低8位要右移8位
b = (rgb >> 0) & 0xFF; // 从传入颜色取出对应蓝色的值 0-7位不需移位

gray = (r + g + b) / 3; //每一色彩项的值,加起来除3就是对应的灰度值。

return alpha &brvbar; gray << 16 &brvbar; gray << 8 &brvbar; gray;  
//保留alpha值,注意到 r, g, b 每一项都不大于 0xff, gray 也不大于0xff,因此 gray 只有后8位有效,其余位为零。
// 因此实际上 gray << 16 &brvbar; gray <<8 &brvbar; gray 相当于低位三个字节值均相同,再加上alpha值
// 从RGB色彩的含义来说,这个返回值代表的色彩就是一个有alpha值的纯灰度值。


#2


to:luodi(无知者无畏):
谢谢指点!!!
另外能说说java中ColorModel的应用吗?