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。そのようにするにはどうすればよいですか?

ここにいくつかの背景があります:

画像があり、その画像のサイズのグラデーションを作成します(上記のコードを使用)。次に、以下を使用して 2 つの画像をブレンドし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();
}

どれだけグラデーションを透明にしても、薄くするのはそれを捉えていないようで、フルカラーとブレンドし、グラデーションの透明度を無視します。

4

1 に答える 1

0

Compositeこのようなオブジェクトを定義します

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

メソッドではlinear()、前にコンポジットを設定するだけですg.fillRect()

次のコード スニペットは、私のコードの 1 つの描画方法でこのようなことを示しています...

        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);
于 2013-05-18T22:05:25.200 に答える