相关疑难解决方法(0)

旋转BufferedImage实例

我无法轮流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)

这不适合我.我找不到任何方式绘制旋转img2dg.

编辑:我有多个被绘制的对象g,所以我不能旋转它.我需要能够单独旋转东西.

java swing bufferedimage rotation graphics2d

19
推荐指数
3
解决办法
5万
查看次数

在java中旋转图像

我正在寻找旋转图像.我有一个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)

java swing bufferedimage image-processing affinetransform

8
推荐指数
1
解决办法
3万
查看次数

AffineTransform会截断图片,我有什么不对?

我这里有一个尺寸为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年

旋转如何回归这些完全不相关的尺寸?

java awt affinetransform

2
推荐指数
2
解决办法
3710
查看次数