簡體   English   中英

RGBImageFilter不影響我的圖像

[英]RGBImageFilter not affecting my image

我正在嘗試使用RGBImageFilter和FilteredImageSource更改.png文件中的顏色,然后將文件保存到磁盤上,似乎工作正常。.但是當程序完成后打開新文件時,它看起來只是像原始文件一樣,即我剛剛復制了文件。

代碼如下所示:

public class ChangeImageColor {

    public static void main(String[] args) {    
        BufferedImage image = null;
        try {
            image = ImageIO.read(new File("png_test.png") );                
            ImageFilter colorfilter = new RedBlueSwapFilter();              
            FilteredImageSource filteredImageSource = new FilteredImageSource(image.getSource(), colorfilter );             
            Image filteredImage = Toolkit.getDefaultToolkit().createImage(filteredImageSource);             
            BufferedImage filtered = new BufferedImage(
                    filteredImage.getWidth(null), filteredImage.getHeight(null),
                    BufferedImage.TYPE_INT_ARGB);
            Graphics2D g2 = filtered.createGraphics();
            g2.drawImage(image, 0, 0, null);
            g2.dispose();           
            save(filtered, "png");    
        } catch( IOException e){
            //do something
            System.out.print(e.getMessage());
        }
    }

    private static void save(BufferedImage image, String ext) {
        String fileName = "png_test_manipulated";
        File file = new File(fileName + "." + ext);
        try {
            ImageIO.write(image, ext, file);  // ignore returned boolean
        } catch(IOException e) {
            System.out.println("Write error for " + file.getPath() +
                               ": " + e.getMessage());
        }
    }       

    static class RedBlueSwapFilter extends RGBImageFilter {
        public RedBlueSwapFilter() {
            // The filter's operation does not depend on the
            // pixel's location, so IndexColorModels can be
            // filtered directly.
            canFilterIndexColorModel = true;
        }

        @Override
        public int filterRGB(int x, int y, int rgb) {    
            /*return ((rgb & 0xff00ff00)
                    | ((rgb & 0xff0000) >> 16)
                    | ((rgb & 0xff) << 16));*/
            return 0x00000000;
        }
    }    
}

你的問題:

   g2.drawImage(image, 0, 0, null);

您使用此代碼繪制舊圖像,請嘗試刪除以下行:

   Graphics2D g2 = filtered.createGraphics();
   g2.drawImage(image, 0, 0, null);
   g2.dispose();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM