Java将图像插入椭圆形

Java将图像插入椭圆形,java,swing,Java,Swing,我的java程序中有一个圆圈。它只是一个简单的圆圈,如下所示: private BufferedImage img; Graphics2D g = img.createGraphics(); g.fill(new Area(new Ellipse2D.Double(x, y, diam, diam))); image = Toolkit.getDefaultToolkit().getImage(url); g2.drawImage(image, x, y, WIDTH, HEIGHT, nul

我的java程序中有一个圆圈。它只是一个简单的圆圈,如下所示:

private BufferedImage img;
Graphics2D g = img.createGraphics();
g.fill(new Area(new Ellipse2D.Double(x, y, diam, diam)));
image = Toolkit.getDefaultToolkit().getImage(url);
g2.drawImage(image, x, y, WIDTH, HEIGHT, null);
现在我想在圆中插入一个图像。我知道如何使用drawImage创建图像,如下所示:

private BufferedImage img;
Graphics2D g = img.createGraphics();
g.fill(new Area(new Ellipse2D.Double(x, y, diam, diam)));
image = Toolkit.getDefaultToolkit().getImage(url);
g2.drawImage(image, x, y, WIDTH, HEIGHT, null);
但是我怎样才能在圆内创建图像呢

编辑: 我试着按照ControlAltDel的建议进行剪辑,但它不起作用,我不知道为什么。我的密码是贝娄。 我的程序只适用于简单的黄色圆圈。在文件Pang.java中,我尝试替换以下行: g、 填充(bubbles[i].getBubbleArea()); 作者: Image Image=newimageicon(“bubble.png”).getImage(); g、 夹子(新的椭圆形2D双(100100505)); g、 drawImage(图像,150,180,空); 但它不起作用,我也没有收到任何错误。 我做错了什么

Pang.java:
package-pang.gui;
导入java.awt.*;
导入java.awt.event.*;
导入java.awt.geom.*;
导入java.awt.image.buffereImage;
导入java.awt.TexturePaint;
导入java.io.File;
导入java.io.IOException;
导入javax.imageio.imageio;
导入javax.swing.*;
类形状碰撞{
专用缓冲图像img;
私人区域限制;
private int w=800;//游戏窗口的宽度
private int h=400;//游戏窗口的高度
//私人泡沫=新泡沫(w,h);
私人泡沫[]泡沫=新泡沫[4];
形状碰撞(){
img=新的BuffereImage(w,h,BuffereImage.TYPE_INT_RGB);
/**
*窗口中显示的游戏的全局图像。此图像将
*添加到JLabel(图像标签)
*/
最终JLabel imageLabel=新JLabel(新图像图标(img));
/**
*包含游戏全局图像的JLabel
*/
对于(int i=0;ibubble.getX()
&&bubble1.getX()bubble.getY()
&&bubble1.getY()=w
&&bubble.getxdelta()>0)
bubble.invert_xDelta();
如果(bubble.getX()-bubble.getBubbleDiam()/2=h
&&bubble.get_yDelta()>0)
bubble.invert_yDelta();

如果(bubble.getY()-bubble.getBubbleDiam()/2有两种方法可以做到这一点

  • (更容易)使用圆
    形状
  • 图像
    转换为
    纹理绘制
    ,然后执行以下操作

  • 剪辑是这样的吗?:Image Image=new-ImageIcon(“Image.png”).getImage();g.clip(新的Ellipse2D.Double(x,y,d,d));g.drawImage(Image,x,y,null);是的,这就是你要做的,尽管我建议你保持你的剪辑形状不变,而不是每次都做一个新的