2013-04-17 47 views
16

Tôi đang cố gắng tự động thay đổi màu cho một tập hợp các biểu tượng. Mỗi biểu tượng có một lớp đầy màu trắng và một phần khác là trong suốt. Dưới đây là một ví dụ: (trong trường hợp này đó là màu xanh lá cây, chỉ để làm cho nó có thể nhìn thấy)Thay đổi màu của các phần không trong suốt của png trong Java

icon search

Tôi cố gắng để làm như sau:

private static BufferedImage colorImage(BufferedImage image) { 
     int width = image.getWidth(); 
     int height = image.getHeight(); 

     for (int xx = 0; xx < width; xx++) { 
      for (int yy = 0; yy < height; yy++) { 
       Color originalColor = new Color(image.getRGB(xx, yy)); 
       System.out.println(xx + "|" + yy + " color: " + originalColor.toString() + "alpha: " 
         + originalColor.getAlpha()); 
       if (originalColor.equals(Color.WHITE) && originalColor.getAlpha() == 255) { 
        image.setRGB(xx, yy, Color.BLUE.getRGB()); 
       } 
      } 
     } 
     return image; 
    } 

Tôi có vấn đề là mỗi điểm ảnh Tôi nhận được có cùng giá trị:

32|18 color: java.awt.Color[r=255,g=255,b=255]alpha: 255 

Vì vậy, kết quả của tôi chỉ là một hình vuông màu. Làm cách nào để tôi có thể thay đổi màu của các phần không trong suốt? Và tại sao, tất cả các pixel đều có cùng giá trị alpha? Tôi đoán đó là vấn đề chính của tôi: Giá trị alpha không được đọc chính xác.

Trả lời

12

Vấn đề là, rằng

Color originalColor = new Color(image.getRGB(xx, yy)); 

vứt bỏ tất cả các giá trị alpha. Thay vào đó, bạn phải sử dụng

Color originalColor = new Color(image.getRGB(xx, yy), true); 

để giữ giá trị alpha khả dụng.

18

Tại sao nó không hoạt động, tôi không biết, điều này sẽ xảy ra.

này thay đổi tất cả các pixles sang màu xanh, duy trì các giá trị alpha của họ ...

enter image description here

import java.awt.image.BufferedImage; 
import java.awt.image.WritableRaster; 
import java.io.File; 
import java.io.IOException; 
import javax.imageio.ImageIO; 

public class TestColorReplace { 

    public static void main(String[] args) { 
     try { 
      BufferedImage img = colorImage(ImageIO.read(new File("NWvnS.png"))); 
      ImageIO.write(img, "png", new File("Test.png")); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 
    } 

    private static BufferedImage colorImage(BufferedImage image) { 
     int width = image.getWidth(); 
     int height = image.getHeight(); 
     WritableRaster raster = image.getRaster(); 

     for (int xx = 0; xx < width; xx++) { 
      for (int yy = 0; yy < height; yy++) { 
       int[] pixels = raster.getPixel(xx, yy, (int[]) null); 
       pixels[0] = 0; 
       pixels[1] = 0; 
       pixels[2] = 255; 
       raster.setPixel(xx, yy, pixels); 
      } 
     } 
     return image; 
    } 
} 
+0

Cám ơn :) này – 4ndro1d

Các vấn đề liên quan