如何使用 MemoryImageSource 扩展图像?

How to expand an image with MemoryImageSource?

我从一个文件中得到一个 byte[],我想显示关联的图像,我发现:

// p.data is a byte[]
int[] pixels = new int[p.width * p.height];
for (int i = 0; i < pixels.length; i++) {
   pixels[i] = 0xFF000000 + intValue(p.data[i]) * 0x010101;
}
MemoryImageSource source = new MemoryImageSource(p.width, p.height, pixels, 0, p.width );
Image img = Toolkit.getDefaultToolkit().createImage(source);

//intValue is just : intValue(byte b) { return b < 0 ? b + 256 : b;}

那个节目:


我想要两倍大(宽度和高度),我试过了:

int[] pixels = new int[p.width * p.height *4];
for (int i = 0; i < pixels.length; i++) {
   pixels[i] = 0xFF000000 + BytePixmap.intValue(p.data[i/4]) * 0x010101;
}
MemoryImageSource source = new MemoryImageSource(p.width*2,p.height*2, pixels, 0, p.width);

我得到: and 如果我将 p.width 更改为 p.width*2(最后一个参数)

我不知道如何保留一张 8*8 的正方形图片


编辑:

可以在这里找到一个例子:Working example,它不能在 Ideone 上 运行 因为它需要显示,但它可以工作

加载图像后调整图像大小。这样您就可以使用 java2d api.

中可用的所有工具
BufferedImage scaled = new BufferedImage(p.width*2,p.height*2, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = (Graphics2D)scaled.getGraphics();
g.drawImage(img, AffineTransform.getScaleInstance(2,2), null);
g.dispose();

现在缩放后的图像尺寸是原来的 2 倍。您甚至可以在您使用的显示器上执行此操作。

另一种方式,如果你只是想要一个缩放实例,那么你可以使用Image#getScaledInstance