代码之家  ›  专栏  ›  技术社区  ›  9oose

如何在Java中制作圆形图像标签?

  •  -1
  • 9oose  · 技术社区  · 9 年前

    如何在Java中制作圆形图像标签?

    我想做圆形图像标签,但我做不到…嘿,伙计们帮帮我…t.t

    我尝试制作圆形面板来添加图像图标,但没有成功。

    请帮帮我。。。

    3 回复  |  直到 9 年前
        1
  •  10
  •   Andrew Thompson    9 年前

    我认为你应该改变你的策略,而不是试图修改组件的输出,而是修改输入。。。

    enter image description here

    因此,所有这些都是将圆形(基于alpha)遮罩应用于另一个图像

        BufferedImage master = ImageIO.read(new File("/Volumes/Disk02/Dropbox/MegaTokyo/thumnails/megatokyo_omnibus_1_3_cover_by_fredrin-d4oupef.jpg"));
    
        int diameter = Math.min(master.getWidth(), master.getHeight());
        BufferedImage mask = new BufferedImage(master.getWidth(), master.getHeight(), BufferedImage.TYPE_INT_ARGB);
    
        Graphics2D g2d = mask.createGraphics();
        applyQualityRenderingHints(g2d);
        g2d.fillOval(0, 0, diameter - 1, diameter - 1);
        g2d.dispose();
    
        BufferedImage masked = new BufferedImage(diameter, diameter, BufferedImage.TYPE_INT_ARGB);
        g2d = masked.createGraphics();
        applyQualityRenderingHints(g2d);
        int x = (diameter - master.getWidth()) / 2;
        int y = (diameter - master.getHeight()) / 2;
        g2d.drawImage(master, x, y, null);
        g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.DST_IN));
        g2d.drawImage(mask, 0, 0, null);
        g2d.dispose();
    
        JOptionPane.showMessageDialog(null, new JLabel(new ImageIcon(masked)));
    

    这样做的好处是可以获得软剪辑( setClip 不提供)以及不干扰组件的现有剪裁形状

    applyQualityRenderingHints ...

    public static void applyQualityRenderingHints(Graphics2D g2d) {
    
        g2d.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
        g2d.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_ENABLE);
        g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
        g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
        g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
        g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
    
    }
    
        2
  •  -1
  •   Alan    3 年前

    转到日志NiceApplication1.BlogSpot。Com,并下载新的NiceApplication1 Home Stupendous,然后在解压缩后转到dist文件夹并打开Java Jar NiceApplication 1,并获取Jar Nice_Application_1_Files,然后仅在某些行中转换方法以节省空间。

    在jar之后,只添加以下带有文件位置和调用方法的方法。

    导入Nice_Application_1.Icon;

    private void Addicon()引发java.lang.NullPointerException,IOException{

        Icon test = new Icon("C:\\Image.jpg");
    
        String nice = test.icon();
    
        BufferedImage Appli1 = test.Application1;
    
        jToggleButton0.setIcon(new ImageIcon(Appli1));
    
    }
    

    //圆形图标可以与上述方法一起使用。

    上面的示例中,如果需要在弹出窗口中使用Jbutton,请键入JOptionPane。showMessageDialog(空,新的JLabel(新的ImageIcon(Appli1)));

    下载jar后,您还可以获得更多优势。

        3
  •  -2
  •   camickr    8 年前

    您可以使用 Area 类以创建剪辑区域:

    BufferedImage image = ImageIO.read(new File("..."));
    Area clip = new Area( new Rectangle(0, 0, image.getWidth(), image.getHeight()) );
    Area oval = new Area( new Ellipse2D.Double(0, 0, image.getWidth() - 1, image.getHeight() - 1) );
    clip.subtract( oval );
    Graphics g2d = image.createGraphics();
    g2d.setClip( clip );
    g2d.setColor( Color.BLACK );
    g2d.fillRect(0, 0, image.getWidth(), image.getHeight());
    JOptionPane.showMessageDialog(null, new JLabel(new ImageIcon(image)));