gpt4 book ai didi

java - 将位图与标准 Java 合并

转载 作者:太空宇宙 更新时间:2023-11-04 14:16:21 26 4
gpt4 key购买 nike

我发现了很多关于如何合并 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com