【问题标题】:How draw oval image in JLabel如何在 JLabel 中绘制椭圆形图像
【发布时间】:2016-08-15 00:40:53
【问题描述】:

我想使用 Graphics 在 JLabel 中绘制椭圆形图像。这是我的代码,但不了解图形。

class imagePanel extends JLabel {
    //private PlanarImage image;

    private BufferedImage buffImage = null;

    private void drawFingerImage(int nWidth, int nHeight, byte[] buff) {
        buffImage = new BufferedImage(nWidth, nHeight, BufferedImage.TYPE_BYTE_GRAY);
        buffImage.getRaster().setDataElements(0, 0, nWidth, nHeight, buff);
        Graphics g = buffImage.createGraphics();
        g.drawImage(buffImage, 0, 0, 140, 150, null);
        g.dispose();
        repaint();
    }

    public void paintComponent(Graphics g) {
        g.drawImage(buffImage, 0, 0, this);
    }
}

I have this

【问题讨论】:

    标签: java graphics


    【解决方案1】:

    您需要 here 和 here 中提到的 setClip() 方法的帮助。

    当涉及到代码时,它应该是这样的

    public class OvalImageLabel extends JLabel {
    
        private Image image;
    
        public OvalImageLabel(URL imageUrl) throws IOException {
            image = ImageIO.read(imageUrl);
        }
    
        public void paintComponent(Graphics g) {
    
            super.paintComponent(g);
    
            g.setClip(new java.awt.geom.Ellipse2D.Float(0f,0f, getWidth(),getHeight()/2));
            g.drawImage(image, 0, 0, this);
    
        }
    }
    

    以及使用此类的正在运行的应用程序

    public class UsageExample extends JPanel {
    
        public UsageExample() {
            super(new BorderLayout());
            OvalImageLabel l;
            try {
                l = new OvalImageLabel(new File("/path/to/image.png").toURI().toURL());
            } catch (Exception e) {
                e.printStackTrace();
                return;
            }
    
            add(l, BorderLayout.CENTER);
        }
    
        private static void createAndShowGUI() {
            JFrame frame = new JFrame();
            frame.setContentPane(new UsageExample());
            frame.setSize(200, 200);
            frame.setVisible(true);
        }
    
        public static void main(String[] args) {
            javax.swing.SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    createAndShowGUI();
                }
            });
        }
    }
    

    【讨论】:

    • 谢谢,它成功了,我只使用 ´g.setClip(new java.awt.geom.Ellipse2D.Float(0f,0f, getWidth(),getHeight()/2));´
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    相关资源
    最近更新 更多