我无法轮流BufferedImage显示.我认为旋转工作正常,但我实际上无法将其绘制到屏幕上.我的代码:
Class extends JPanel {
BufferedImage img;
int rotation = 0;
public void paintComponent(Graphics g) {
g.clearRect(0, 0, getWidth(), getHeight());
img2d = img.createGraphics();
img2d.rotate(Math.toRadians(rotation), img.getWidth() / 2, img.getHeight() / 2);
g.drawImage(img, imgx, imgy, null);
this.repaint();
}
}
Run Code Online (Sandbox Code Playgroud)
这不适合我.我找不到任何方式绘制旋转img2d到g.
编辑:我有多个被绘制的对象g,所以我不能旋转它.我需要能够单独旋转东西.
我正在寻找旋转图像.我有一个JInternalFrame包含一个JLabel.标签包含图像.旋转图像后,我需要调整内部框架的大小.我目前的代码旋转图像,但图像边缘周围有黑色,并且偏离中心.对于如何解决这个问题,有任何的建议吗?
public void rotateIcon(int angle)
{
int w = theLabel.getIcon().getIconWidth();
int h = theLabel.getIcon().getIconHeight();
int type = BufferedImage.TYPE_INT_RGB; // other options, see api
BufferedImage DaImage = new BufferedImage(h, w, type);
Graphics2D g2 = DaImage.createGraphics();
double x = (h - w)/2.0;
double y = (w - h)/2.0;
AffineTransform at = AffineTransform.getTranslateInstance(x, y);
at.rotate(Math.toRadians(angle), w/2.0, h/2.0);
g2.drawImage(new ImageIcon(getData()).getImage(), at, theLabel);
g2.dispose();
theLabel.setIcon(new ImageIcon(DaImage));
this.setSize(DaImage.getWidth(),DaImage.getHeight()); //resize the frame
}
Run Code Online (Sandbox Code Playgroud) 我这里有一个尺寸为2156x1728的黑/白png文件,我希望使用AffineTransform旋转90度.生成的图像没有正确的比例.这里有一些示例代码(假设我已成功将png文件加载到BufferedImage中):
public BufferedImage transform(BufferedImage image){
System.out.println("Input width: "+ image.getWidth());
System.out.println("Input height: "+ image.getHeight());
AffineTransform affineTransform = new AffineTransform();
affineTransform.setToQuadrantRotation(1, image.getWidth() / 2, image.getHeight() / 2);
AffineTransformOp opRotated = new AffineTransformOp(affineTransform, AffineTransformOp.TYPE_BILINEAR);
BufferedImage transformedImage = opRotated.createCompatibleDestImage(image, image.getColorModel());
System.out.println("Resulting width: "+ transformedImage.getWidth());
System.out.println("Resulting height: "+ transformedImage.getHeight());
transformedImage = opRotated.filter(image, transformedImage);
return transformedImage;
}
Run Code Online (Sandbox Code Playgroud)
输出相应:
输入宽度:2156
输入高度:1728
结果宽度:1942年
结果身高:1942年
旋转如何回归这些完全不相关的尺寸?