【问题标题】:Transparent BufferedImage shows with a black background while painted on a JLabel在 JLabel 上绘制时,透明 BufferedImage 显示为黑色背景
【发布时间】:2010-12-06 18:15:37
【问题描述】:

我有一个从 png 文件创建的 BufferedImage。创建它时,我将类型设置为 TYPE_INT_ARGB,这应该给我一个透明的图像。当我在 JPanel 中使用paintComponent 绘制图像时,我得到的图像具有黑色背景。我真的需要让它透明,所以任何帮助都会有用。为了清楚起见,这里是代码:

public class ImagePanel extends JPanel {      

    private static final long serialVersionUID = 1L;
    private BufferedImage image; 

    public ImagePanel() {
        this.image = null;
    }


    public void createImage(String fileName) {
        this.image = ImageUtilities.getBufferedImage(fileName, this);
        this.repaint();

     }

    public void paint(Graphics g) {
        g.drawImage(this.image, 0, 0, this);
    }
}

这是我加载图像的方式:

public class ImageUtilities {

/** Create Image from a file, then turn that into a BufferedImage.
*/

   public static BufferedImage getBufferedImage(String imageFile, Component c) {
       Image image = c.getToolkit().getImage(imageFile);
       waitForImage(image, c);
       BufferedImage bufferedImage = new BufferedImage(image.getWidth(c), image.getHeight(c),
                    BufferedImage.TYPE_INT_ARGB);
       Graphics2D g2d = bufferedImage.createGraphics();
       g2d.drawImage(image, 0, 0, c);
       return(bufferedImage);
   }

最后要补充的是,这个 ImagePanel 位于另一个 Panel 中,如果这有任何意义的话。

【问题讨论】:

    标签: java swing bufferedimage


    【解决方案1】:

    不确定这是否能解决您的问题,但是:

    【讨论】:

    • 新的 IO API 做到了这一点,虽然很高兴看到使用旧方法的解决方案(如果我们假设我使用的方法被认为是旧的),谢谢 :)。
    【解决方案2】:

    您是否仅限于使用较旧版本的 Java?尝试使用 ImageIO.read(fileName) 加载图像文件。

    【讨论】:

    • 正如我在之前的评论中所说,ImageIO.read 做到了,现在只是出于好奇,我会尝试看看如何以旧方式完成。谢谢:)
    • 不用担心 :) 如果尝试旧方法,请尝试使用 Toolkit.getDefaultToolkit().createImage("myimage.png") 打开图像并将返回的图像直接绘制到组件而不是创建首先是 BufferedImage。
    • 好的,但我能否对以这种方式打开的图像执行图像处理技术。我正在编写一个应用程序来演示如何在 Java 中执行模糊、锐化等操作。
    • 不,你不能干化成 Image 对象,你必须创建一个 BufferedImage 才能画进去。
    【解决方案3】:

    试试这个(即 setComposite()):

    g2d.setComposite(AlphaComposite.SrcOver); g2d.setPaint(背景颜色); g2d.fillRect(0, 0, w, h);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-16
      • 1970-01-01
      • 2016-02-22
      • 1970-01-01
      • 1970-01-01
      • 2021-04-29
      • 2023-03-05
      • 1970-01-01
      相关资源
      最近更新 更多