【发布时间】:2015-05-17 21:55:12
【问题描述】:
最近我一直在尝试在 Java 中缩放像素数组 (int[])。我使用 .setRGB() 将所有像素数据添加到 BufferedImage 中。然后 BufferedImage 提供了一个名为 .getScaledInstance() 的函数。这应该很适合我的目的,但我遇到了一个问题。 .getScaledInstance() 返回一个图像,而不是一个 BufferedImage。对于 Image 对象,我不能使用 .getRGB() 将缩放后的 Image 中的所有像素数据(以 int[] 形式)添加回数组中。有没有办法从图像文件中获取原始像素数据?我错过了什么吗?我查看了其他问题并进行了一些谷歌搜索,他们似乎只想以不同形式的数组(int [] [])或字节获取图片数据。任何帮助将不胜感激,谢谢。此外,Sprite 是我制作的一个正在使用的类。这是我的代码:
public Sprite scaleSprite(Sprite s, int newWidth, int newHeight){
BufferedImage image = new BufferedImage(s.getWidth(), s.getHeight(), BufferedImage.TYPE_INT_RGB);
for(int y = 0; y < s.getHeight(); y++){
for(int x = 0; x < s.getWidth(); x++){
image.setRGB(x, y, s.getPixel(x, y));
}
}
Image newImage = image.getScaledInstance(newWidth, newHeight, Image.SCALE_AREA_AVERAGING);
Sprite newS = new Sprite(newWidth, newHeight);
int[] pixels = new int[newWidth * newHeight];
newImage.getRGB(0, 0, newWidth, newHeight, pixels, 0, newWidth); //This is where I am running into problems. newImage is an Image and I cannot retrieve the raw pixel data from it.
newS.setPixels(pixels);
return newS;
}
【问题讨论】:
标签: java image bufferedimage scaling