【问题标题】:Rotating image cut off at sides buffered image, image icon, java旋转图像在侧面被切断缓冲图像,图像图标,java
【发布时间】:2015-09-29 12:45:24
【问题描述】:

        BufferedImage img = ImageIO.read(new File(paramString));
    double locationX = img.getWidth(this) / 2;
    double locationY = img.getHeight(this) / 2;
    AffineTransform tx = AffineTransform.getRotateInstance(Math.toRadians(paramInt3), locationX, locationY);
    AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);
    BufferedImage bimg = new BufferedImage (img.getWidth(this), img.getWidth(this), BufferedImage.TYPE_BYTE_INDEXED);
    bimg = op.filter (img, null);
    ImageIcon localImageIcon = new ImageIcon (bimg);

为什么边会被切掉? 我正在使用一个要求最终结果为 ImageIcon 的库。

【问题讨论】:

  • 问题在哪里?
  • 我的代码旋转了图像,但顶部和左侧的角被切断

标签: java rotation bufferedimage imageicon


【解决方案1】:

您的目标图像在此处创建:

BufferedImage bimg = new BufferedImage (img.getWidth(this), img.getWidth(this), BufferedImage.TYPE_BYTE_INDEXED);

这是一个正方形!如果您的源图像不是正方形,您应该像这样创建目标图像:

BufferedImage bimg = new BufferedImage (img.getHeight(this), img.getWidth(this), BufferedImage.TYPE_BYTE_INDEXED);

【讨论】:

  • 谢谢,但图像是方形的,顶部和左侧的角仍然被切掉。
  • 虽然显然是个错误,但这并不是真正的问题,因为bimg 引用在下一行被覆盖。也许@ogprogrammingsquad 的意思是op.filter (img, bimg);?将null 作为输出参数传递时,将创建目标。
【解决方案2】:

也许这只是一个四舍五入的问题:

double locationX = img.getWidth(this) / 2;
double locationY = img.getHeight(this) / 2;

宽度和高度是整数,如果它们不是整数,您可能会遇到舍入问题。试试这个:

double locationX = ((double)img.getWidth(this)) / 2;
double locationY = ((double)img.getHeight(this)) / 2;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-14
    • 1970-01-01
    相关资源
    最近更新 更多