带有透明背景的屏幕截图

发布于 2025-02-12 13:47:07 字数 1975 浏览 1 评论 0原文

我创建了一个带有几个Jlabels的程序。他们每个人都显示一个具有透明背景的PNG文件。使用此代码,我可以叠加它们并进行屏幕截图,但也可以拍摄面板。 我该如何保持背景透明?

buildgui.java

        JLabel labelFirst = new JLabel(new ImageIcon("img/first.png"));
        labelFirst.setBounds(10, 10, 250, 190);
        panelScreenshot.add(labelFirst);
        
        JLabel labelSecond = new JLabel(new ImageIcon("img/second.png"));
        labelSecond.setBounds(10, 10, 250, 190);
        panelScreenshot.add(labelSecond);
        
        JLabel labelThird = new JLabel(new ImageIcon("img/third.png"));
        labelThird.setBounds(10, 10, 250, 190);
        panelScreenshot.add(labelThird);

        
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==btnSave) {
            classSave salvataggio = new classSave();
            salvataggio.classSave(panelScreenshot);
        }
    }

classsave.java

    public void classSave(Component component) {
        Rectangle rect = component.getBounds();

        try {
            String dirName = ("Save/");
            String timeStamp = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss").format(new Date());
            String fileName = timeStamp + "." + "png";
            File dir = new File (dirName);
            boolean dirCreated = dir.mkdir();

            if(dirCreated) {
                System.out.println("The directory has been created.");
            }
            else {
                System.out.println("The directory already exists.");
            }
            BufferedImage captureImage =
                new BufferedImage(rect.width, rect.height,
                BufferedImage.TYPE_INT_ARGB);
            component.paint(captureImage.getGraphics());
            ImageIO.write(captureImage, "png" , new File(dir, fileName));
            System.out.println("The file was saved!");
        } catch (IOException ex) {
            System.err.println(ex);
        }
    }

I created a program with several JLabels. Each of them shows a png file with transparent background. With this code I can overlay them and take a screenshot, but the panel is also taken.
How can I do to keep the background transparent?

BuildGUI.java

        JLabel labelFirst = new JLabel(new ImageIcon("img/first.png"));
        labelFirst.setBounds(10, 10, 250, 190);
        panelScreenshot.add(labelFirst);
        
        JLabel labelSecond = new JLabel(new ImageIcon("img/second.png"));
        labelSecond.setBounds(10, 10, 250, 190);
        panelScreenshot.add(labelSecond);
        
        JLabel labelThird = new JLabel(new ImageIcon("img/third.png"));
        labelThird.setBounds(10, 10, 250, 190);
        panelScreenshot.add(labelThird);

        
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==btnSave) {
            classSave salvataggio = new classSave();
            salvataggio.classSave(panelScreenshot);
        }
    }

classSave.java

    public void classSave(Component component) {
        Rectangle rect = component.getBounds();

        try {
            String dirName = ("Save/");
            String timeStamp = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss").format(new Date());
            String fileName = timeStamp + "." + "png";
            File dir = new File (dirName);
            boolean dirCreated = dir.mkdir();

            if(dirCreated) {
                System.out.println("The directory has been created.");
            }
            else {
                System.out.println("The directory already exists.");
            }
            BufferedImage captureImage =
                new BufferedImage(rect.width, rect.height,
                BufferedImage.TYPE_INT_ARGB);
            component.paint(captureImage.getGraphics());
            ImageIO.write(captureImage, "png" , new File(dir, fileName));
            System.out.println("The file was saved!");
        } catch (IOException ex) {
            System.err.println(ex);
        }
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文