【问题标题】:Java BufferedImage set new sizeJava BufferedImage 设置新大小
【发布时间】:2023-04-03 07:06:01
【问题描述】:

我正在使用BufferedImage 来显示单个图像。我通过从getRaster() 获取像素数据而不是更改它来更改图像数据。如果我只改变像素值,它会很好用,但如果我改变像素数据数组的大小(宽度/高度),新的BufferedImage 将不会调整大小。

代码如下:

bufferedImage = new BufferedImage(img.width, img.height, bufferedImage.getType());
bufferedImage.getRaster().setDataElements(0, 0,  img.width, img.height, img.pixels);

我还需要做什么才能更改bufferedImagesize?

例如,如果我让像素数组不变,只是交换宽度/高度(所以像素长度相同),图像不会改变。

【问题讨论】:

  • 你能发布一个代码sn-p来演示这个问题吗?从当前的 sn-p 中,我不明白出了什么问题。如果您创建像new BufferedImage(height, width, ...)setDataElement(0, 0, height, width, ...) 这样的图像,那么生成的图像肯定会与您创建(width, height, ...) 时的图像不同
  • 上面的代码是我用的。问题是初始的 BufferedImage 具有不同的宽度和高度,当我重新创建缓冲图像时,如果它具有不同的大小,它就不起作用。我认为这不是因为它,而是因为它的容器(ImageIcon 和 JLabel)没有应用大小更新。
  • 问题是您发布的代码没有说明问题。它不编译/运行。最好编写一个小代码 sn-p 运行并演示您的问题,否则我怀疑人们将能够回答您的问题

标签: java awt bufferedimage


【解决方案1】:

我认为从中创建一个新的 BufferedImage 应该可行:

BufferedImage nImg = new BufferedImage(nW, nH, bufferedImage.getType());

Graphics2D g2d = nImg.createGraphics();
g2d.drawImage(bufferedImage, 0, 0, null);
g2d.dispose();

【讨论】:

  • 您在上面声明但没有使用 temp。我不想使用任何不必要的函数进行重新缩放,因为我只想将bufferedImage 数据设置为img.pixels[]
  • 是的,我忘记绘制新图像了。如果您只想更改大小而不缩放它,您可以跳过缩放部分并使用旧图像。我编辑了我的答案。
猜你喜欢
  • 2010-10-12
  • 2010-09-18
  • 2017-09-28
  • 1970-01-01
  • 2014-03-30
  • 1970-01-01
  • 1970-01-01
  • 2018-06-27
  • 1970-01-01
相关资源
最近更新 更多