Java 如何使用MemoryImageSource展开图像?

Java 如何使用MemoryImageSource展开图像?,java,image,pixel,memoryimagesource,Java,Image,Pixel,Memoryimagesource,我从文件中获取了一个字节[],我想显示关联的图像,我发现: // 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 MemoryImageSourc

我从文件中获取了一个
字节[]
,我想显示关联的图像,我发现:

// 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;}
//p.data是一个字节[]
int[]像素=新int[p.width*p.height];
对于(int i=0;i
这表明:


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

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);
int[]像素=新的int[p.width*p.height*4];
对于(int i=0;i
我得到:如果我将
p.width
更改为
p.width*2
(最后一个参数)

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


编辑:


这里可以找到一个示例:,它不能在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

我刚才使用的
f.add(新的显示图像(img.getScaledInstance(w*4,h*4,0))谢谢