我发现了很多关于如何合并 bitmpap 的实现,现在我正在尝试做同样的事情,但不像我之前见过的每次尝试那样使用 Android jar。
我有 16 个 128*128 像素的位图图像。
我需要垂直合并它们...结果是一个全黑的 bmp 128x128*16...所以它不起作用。
这是我到目前为止所做的:
将所有 128*128 像素图 block 的 Bmp 读取到 BufferedImage 数组中:
BufferedImage[] input = new BufferedImage[16];
int counter = 0;
for(File f: new File(fixBmpPathFolder).listFiles()){
System.out.println(f.getAbsolutePath() + " loaded!");
int type = BufferedImage.TYPE_BYTE_BINARY;
input[counter] = new BufferedImage(ImageIO.read( f ).getWidth(null), ImageIO.read( f ).getHeight(null), type);
counter++;
}
mergeAndSave(input);
这里是 mergeAndSave 方法:
public static void mergeAndSave(BufferedImage input[]) throws IOException {
BufferedImage bimage = new BufferedImage(128, 128*input.length, BufferedImage.TYPE_BYTE_BINARY);
Graphics g = bimage.createGraphics();
int y = 0;
for ( int i = 0; i < input.length; i++ ) { //replaced by input.length
g.drawImage( input[i],0,y,null);
y += 128;
}
g.dispose();
ImageIO.write(bimage, "BMP", new FileOutputStream(getFileResultAbsoluteName()));
}
现在我对 png 进行了类似的尝试,效果很好,现在经过一些研究,我发现它也适用于 bmp,正确设置缓冲结果图像的类型整数枚举。
我已经为单个 bmp 运行了这段代码,它可以工作,只需读取并保存在另一个地方即可。
根据我的需要,文件必须是二进制类型结果。
谢谢!
编辑:抱歉,我把最后一个实验值留在了单循环上,但我显然已经尝试过完整的图像循环。 现在我知道这段代码并不出色,但它只是实现目标的一个简单的划痕。 垂直合并它们意味着我有 16 个相同尺寸的位图 (128*128),并且我想得到一个结果位图,它将是起始 16 个位图的连接,其中它们是一个在彼此之上。
最佳答案
主要问题是你的for
循环,你已经硬编码了1
的边界,你当然需要用input.length
替换它。
此外,我还用 128*input.length
而不是 128*16
替换了 BufferedImage
的构造,因为这意味着您硬编码了 16
图像。
最后,我将 hcount
重命名为 y
,因为这是一个更语义化的名称。
public static void mergeAndSave(BufferedImage input[]) throws IOException {
int type = BufferedImage.TYPE_BYTE_BINARY;
BufferedImage bimage = new BufferedImage(128, 128*input.length, type);
Graphics g = bimage.createGraphics();
int y = 0;
for ( int i = 0; i < input.length; i++ ) { //replaced by input.length
g.drawImage( input[i],0,y,null);
y += 128;
}
g.dispose();
ImageIO.write(bimage, "BMP", new FileOutputStream(getFileResultAbsoluteName()));
}
但另一方面,我认为这段代码的构造不是很好。它对图像做出了很多假设。这使得代码几乎不可重用,这是优秀代码的主要方面之一:
- 您假设所有图像的尺寸均相同,均为 128x128,但您可以放弃此限制;
- 您对很多常量进行了硬编码。
也许您应该考虑使您的代码更加通用,这样您就可以用它解决更多问题。
关于java - 将位图与标准 Java 合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27679148/