我无法找到的Graphics2D内平局图像过载,这将使我去执行这样的任务,有人可以帮我找出一个可以如何做到这一点 - 最好是不用交换到更先进的图形框架如OpenGL,在Graphics2D绘制图像的内部定义的四边形
感谢。
为了澄清,四可以通过与四边的任何定义;这意味着钻石或长方形或更复杂的形状。
MRE已经消除了他的许多言论,因此它好像我回答,没有人,但是我都在评论说是什么MRE说的回应。
我无法找到的Graphics2D内平局图像过载,这将使我去执行这样的任务,有人可以帮我找出一个可以如何做到这一点 - 最好是不用交换到更先进的图形框架如OpenGL,在Graphics2D绘制图像的内部定义的四边形
感谢。
为了澄清,四可以通过与四边的任何定义;这意味着钻石或长方形或更复杂的形状。
MRE已经消除了他的许多言论,因此它好像我回答,没有人,但是我都在评论说是什么MRE说的回应。
见Andrew Thomson's solution为基础。
而不是使用“文字形”的,我创建使用形状:
Polygon polygon = new Polygon();
polygon.addPoint(250, 50);
polygon.addPoint(350, 50);
polygon.addPoint(450, 150);
polygon.addPoint(350, 150);
g.setClip(polygon);
g.drawImage(originalImage, 0, 0, null);
继承Graphics
图像绘制方法
drawImage(Image img, int x, int y, Color bgcolor, ImageObserver observer)
drawImage(Image img, int x, int y, ImageObserver observer)
drawImage(Image img, int x, int y, int width, int height, Color bgcolor, ImageObserver observer)
drawImage(Image img, int x, int y, int width, int height, ImageObserver observer)
drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, Color bgcolor, ImageObserver observer)
drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver observer)
选择你的毒药。由于你甚至无法找到这些,所以我假设在面对缩放和频繁渲染时详细介绍中间图像将是徒劳的。
实施例1 - 画圈在正方形
public class DrawCircleInSquare {
public static void main(String[] args){
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run() {
createAndShowGUI();
}
});
}
private static void createAndShowGUI(){
final JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JPanel panel = new JPanel(){
@Override
protected void paintComponent(Graphics g){
Graphics2D g2 = (Graphics2D)g.create();
// Clear background to white
g2.setColor(Color.WHITE);
g2.clearRect(0, 0, getWidth(), getHeight());
// Draw square
g2.setColor(Color.BLACK);
g2.drawRect(50, 50, 100, 100);
// Draw circle inside square
g2.setColor(Color.RED);
g2.fillOval(88, 88, 24, 24);
g2.dispose();
}
@Override
public Dimension getPreferredSize(){
return new Dimension(200, 200);
}
};
frame.add(panel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
输出
实施例2 - 在一个正方形
绘制图像public class DrawImageInSquare {
private static BufferedImage bi;
public static void main(String[] args){
try {
// Load image
loadImage();
// Create and show GUI
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run() {
createAndShowGUI();
}
});
} catch (IOException e) {
// handle exception
}
}
private static void loadImage() throws IOException{
bi = ImageIO.read(new File("src/resources/psyduck.png"));
}
private static void createAndShowGUI(){
final JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JPanel panel = new JPanel(){
@Override
protected void paintComponent(Graphics g){
Graphics2D g2 = (Graphics2D)g.create();
// Clear background to white
g2.setColor(Color.WHITE);
g2.clearRect(0, 0, getWidth(), getHeight());
// Draw square
g2.setColor(Color.BLACK);
g2.drawRect(50, 50, 100, 100);
// Draw image inside square
g2.setRenderingHint(
RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BICUBIC);
g2.drawImage(bi, 50, 50, 100, 100, null);
g2.dispose();
}
@Override
public Dimension getPreferredSize(){
return new Dimension(200, 200);
}
};
frame.add(panel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
输出
+1好的答案! –
我不记得说四边形的所有角度都是90度,所以这个解决方案不是我要找的。我很清楚你所说的。谢谢你的努力:) – Jeremy
@Jeremy使用转换来旋转,缩放和剪切图像 –
你的意思是像一个长方形的四边形(90度各个角度)?如果不是,它可能会变得复杂。我想你必须重新定义你的图像,仍然是一个矩形,但有一些透明的部分,然后重叠这个图像的地方。 – toto2
@mre您误解了我的问题。 @toto不,不是所有的角度都是90度。感谢您提供的解决方案,但如果我更改了图像源本身,我设置的系统将被击败。 – Jeremy
@mre 定义四边形:一个四边的图形。那不是假设所有角度都是90度。 因此,我为什么说四边形而不是矩形。 – Jeremy