簡體   English   中英

用Java swing.image更改透明度的方法

[英]Way to change transparency with java swing.image

我使用這種方法在框架中繪制圖形。

public void paint(Graphics g) {  
    screenImage = createImage(1280, 720); 
    screenGraphic = screenImage.getGraphics(); 
    screenDraw((Graphics2D) screenGraphic); 
    //g.drawImage(BG, 0, 0, null);
    g.drawImage(screenImage, 0, 0, null);
}

public void screenDraw(Graphics2D g) {
    g.drawImage(BG, 0, 0, null); 
    Graphics2D g2 = (Graphics2D)g;
    if(isMainScreen) {
        //g2.setComposite(alphaComposite);
        g2.drawImage(selectedImage, 100, 220, null);
    }
    paintComponents(g);
    this.repaint();  
}

我希望selectedImage為透明度50%或其他整數。

private Image selectedImage = new ImageIcon(Main.class.getResource("../pic/something.jpg")).getImage(); 

這是selectedImage,並且效果很好。

調整一下Image-> BufferedImage代碼,然后可以將每個像素設置為透明

Image selectedImage = new ImageIcon([...]).getImage();

//Image -> BufferedImage code
BufferedImage img = new BufferedImage(selectedImage.getWidth(null), selectedImage.getHeight(null), BufferedImage.TYPE_INT_ARGB);
Graphics2D g = img.createGraphics();
g.drawImage(selectedImage, 0, 0, null);
g.dispose();

//set each pixel to be transparent
int transparency = 127; //0-255, 0 is invisible, 255 is opaque
int colorMask = 0x00FFFFFF; //AARRGGBB
int alphaShift = 24;
for(int y = 0; y < img.getHeight(); y++)
    for(int x = 0; x < img.getWidth(); x++)
        img.setRGB(x, y, (img.getRGB(x, y) & colorMask) | (transparency << alphaShift));

//img is now transparent, can replace selectedImage if you want (optional)
selectedImage = img;

如果您使用ImageIO.read(File)而不是ImageIcon.getImage() ,它將直接為您提供BufferedImage

暫無
暫無

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

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