如何使用Memory ImageSource扩展图像?

问题描述 投票:1回答:1

我从文件中获取了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;}

那个节目:enter image description here


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

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);

我得到:enter image description hereenter image description here如果我将p.width改为p.width*2(最后一个参数)

我无法想象如何保持8 * 8方形图片


编辑:

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

java image pixel memoryimagesource
1个回答
1
投票

加载后调整图像大小。这样你就可以使用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

© www.soinside.com 2019 - 2024. All rights reserved.