最近学习图像处理,有2个问题不太明白,哪出来想和大家讨论一下,希望明白的朋友不吝赐教,不懂的朋友也能学到东西。1、我们知道扩展ImageFilter类可以实现自定义的图像过滤器,ImageFilter实现了ImageConsumer接口。ImageConsumer接口定义了以下2个重载方法,用来实际传输源图像的像素:
void setPixels(intx, int y, int w, int h, ColorModel model, byte[] pixels, int offset, int scansize)
void setPixels(intx, int y, int w, int h, ColorModel model, int[] pixels, int offset, int scansize)《Java2 图形设计》第6章有这么一段描述(P91):"一但图像生产开始进行,图像生产者将调用其中一个图像消费者的被重载的setPixels()方法。setPixels()可以被调用一次,所以传输的就是整个图像;setPixels()也可以被多次调用,每次调用只传输图像的一部分。"我们编程实现新的图像过滤器时,setPixels()被调用的次数能够控制吗?每次怎样将图像的一部分传进setPixels()?换句话说,如果能够控制setPixels()被调用的次数,每次只需传递一部分图像给图像消费者是否就能够节省部分内存?
2、抽象类RGBImageFilter扩展ImageFilter,它包含一个proteced boolean 成员 canFilterIndexColorModel。《Java2 图形设计》第6章(P100)中关于它的解释是:"如果RGBImageFilter的一个扩展设置这个变量的值为true,则图像将不向过滤器传递图像中的每个像素,而扩展将传递图像中每个颜色的RGB表示。这种方法将会提高性能,尤其对大图像来说。"这段话应该怎么理解?"传递图像中的每个像素"如何理解?像素总得有个形式吧?图像中的每个像素和图像中每个颜色的RGB表示有什么不同?使用颜色的RGB表示为什么会提高性能呢?

解决方案 »

  1.   

    估计象素使用int型吧,RGB使用3个字节型数据吧!过滤的时候不需要再做位运算。
      

  2.   

    louisqiang(tenwin) :    RGBImageFilter类的抽象方法int filterRGB(intx, int y, int rgb)中,
    无论设置canFilterIndexColorModel=true还是=false,传递进方法的都是像素的位置和像素的一个整形表示。那么设置canFilterIndexColorModel还有什么用呢?
        换句话说,我设置了canFilterIndexColorModel=false;后,怎样可以得到传递进过滤器的每个像素而不是图像中每个颜色的RGB表示?
        每个像素和每个颜色的RGB表示的区别我还是没弄清楚。