将位图与标准 Java 合并



我发现了很多关于如何合并bitmpaps的实现,现在我正在尝试做同样的事情,但没有Android jars,就像我以前见过的每一次尝试一样。

我有 16 张 128*128 像素的位图图像。

我需要垂直合并它们...结果我是一个完全黑色的BMP 128x128 * 16......所以它不起作用。

这是我到目前为止所做的:

将所有 128

*128 像素的 Bmp 读取到缓冲图像数组中:

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

这里是合并和保存方法:

   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 进行了类似的尝试,它工作正常,现在经过一些研究,我注意到它也适用于 bmps,正确设置缓冲结果图像的类型整数枚举。

我已经运行了这段代码,对于单个 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,则可以删除此约束;
  • 你硬编码了很多常量。

也许你应该考虑让你的代码更通用,这样你就可以用它解决更多的问题。

相关内容

  • 没有找到相关文章

最新更新