2013-05-18 86 views
0

我有這種方法,它使漸變,但由於某種原因,我不能讓它使漸變具有任何不透明度,如60% opaque如何繪製不透明度的漸變

public static int[] linear(int x1, int y1, int x2, int y2, Color color1, Color color2, int width, int height){ 
    BufferedImage bimg = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); 
    int[] pixels = new int[width * height]; 
    Graphics2D g = bimg.createGraphics(); 
    g.setPaint(new GradientPaint(x1, y1, color1, x2, y2, color2, false)); 
    g.fillRect(0, 0, width, height); 
    bimg.getRGB(0, 0, width, height, pixels, 0, width); 
    return pixels; 

} 

我再這樣稱呼它:

int pink = Colors.rgba(187, 61, 186, 153); 
int yellow = Colors.rgba(209, 192, 8, 153); 
this.spixels = Gradient.linear(0, 0, img.getWidth(), 0, pink, yellow, img.getWidth(), img.getHeight()); 

我不能爲我的生命得到的梯度是60% opaque。我能做些什麼來做到這一點?

下面是一些更多的背景:

我有一個圖像,我然後創建一個梯度圖像的大小(與上面的代碼)。接下來,我將兩個圖像融合在一起使用lighten

public static int lighten(int bg, int fg){ 
    Color bgc = new Color(bg); 
    Color fgc = new Color(fg); 
    int r = Math.max(bgc.getRed(), fgc.getRed()); 
    int g = Math.max(bgc.getGreen(), fgc.getGreen()); 
    int b = Math.max(bgc.getBlue(), fgc.getBlue()); 
    int a = Math.max(bgc.getTransparency(), fgc.getTransparency()); 
    Color f = new Color(r, g, b, a); 
    return f.getRGB(); 
} 

不管我怎麼做透明漸變,減輕似乎並沒有抓住它,並用全綵色融合它,而忽略漸變的透明度。

回答

0

Definen一個Composite對象這樣

private static Composite comp = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.6f); 

linear()方法,只需設置複合g.fillRect()

下面的代碼片段之前,表明了我的代碼之一的繪畫方法的一些這樣的事。 ..

 gg.setComposite(comp); 
     Color ec = gg.getColor(); 

     gg.setColor(Color.darkGray); 

     Shape s = gg.getClip(); 
     if (s != null) 
      gg.fill(s); 

     gg.setComposite(existing); 
     gg.setColor(ec);