将位图与标准Java合并
我已经找到了很多关于如何合并bitmpaps的实现,现在我正在尝试做同样的事情,但是没有Android JAR,就像我以前看到的每一次尝试一样 我有16个128*128像素的位图图像 我需要垂直合并它们…结果我是一个完全黑色的bmp 128x128*16…所以它不工作 这就是我到目前为止所做的: 将128*128 px分片的所有BMP读取到BuffereImage数组中:将位图与标准Java合并,java,graphics,bitmap,Java,Graphics,Bitmap,我已经找到了很多关于如何合并bitmpaps的实现,现在我正在尝试做同样的事情,但是没有Android JAR,就像我以前看到的每一次尝试一样 我有16个128*128像素的位图图像 我需要垂直合并它们…结果我是一个完全黑色的bmp 128x128*16…所以它不工作 这就是我到目前为止所做的: 将128*128 px分片的所有BMP读取到BuffereImage数组中: BufferedImage[] input = new BufferedImage[16]; int
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()));
}
publicstaticvoidmergeandsave(buffereImage输入[])抛出IOException{
BuffereImage bimage=新的BuffereImage(128,128*input.length,BuffereImage.TYPE_BYTE_BINARY);
Graphics g=bimage.createGraphics();
int y=0;
对于(int i=0;i
现在我已经为png做了类似的尝试,效果很好,现在经过一些研究,我注意到它也可以用于bmps,正确设置缓冲结果图像的整数枚举类型
我已经为一个bmp运行了这段代码,它可以工作,只需读取并保存在另一个地方
根据我的需要,该文件必须是二进制类型的结果
谢谢
编辑:抱歉,伙计们,我在单循环上留下了上一个实验值,但我显然尝试了完整的图像循环。
现在我知道这段代码并不精彩,但它只是一个简单的抓取目标。
垂直合并它们意味着我得到了16个相同尺寸(128*128)的位图,我想得到一个结果位图,这将是开始16个位图的连接,其中它们是一个在另一个之上。主要问题是你的
for
循环,你已经硬编码了1
的边界,当然,您需要将其替换为input.length
此外,我还用128*input.length
取代了buffereImage
的结构,而不是128*16
,因为这意味着您需要硬编码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()));
}
publicstaticvoidmergeandsave(buffereImage输入[])抛出IOException{
int type=BufferedImage.type\u BYTE\u BINARY;
BuffereImage双图像=新的BuffereImage(128,128*input.length,type);
Graphics g=bimage.createGraphics();
int y=0;
对于(int i=0;i
然而,另一方面,我认为这段代码的构造不是很好。它对图像做了很多假设。这使得代码几乎不可重用,这是好代码的主要方面之一:
- 假设所有图像都具有相同的128x128大小,您可以放弃此约束李>
- 您硬编码了很多常量
也许你应该考虑让你的代码更通用,这样你就可以用它来解决更多的问题。< /P>那么问题是什么?你说垂直合并是什么意思?我解释得更清楚了,无论如何,这段代码与我到目前为止所做的相同,不是答案…@马克:我在第一个版本中犯了一个小错误,如果你使用新版本,我会得到在结果图片中“合并”的图像…它不会。如果你想使用我的图片,我已经上传到这里: