将图像合并到一个文件中,而不在Android的内存中创建完整图像

问题描述 投票:0回答:1

我需要在Android中“打包处理”一些任意大小的位图。我可以轻松地使用BitmapRegionDecoder创建较小的块进行处理,但是一旦完成,我需要将它们重新组装到一个文件中。由于最终图像可以是任何大小,因此不能在内存中创建相应的位图并使用Canvas对其进行写入。

我见过this thread,但我想在没有外部库的情况下进行此操作(由于使用Android,我受到这些限制)。理想情况下,我追求某种BitmapRegionEncoder。我并不在乎输出格式,只要它是图像(PNG,JPG甚至是BMP)即可。我也很高兴在Java中使用JNI在C中做到这一点。

java android image bitmap out-of-memory
1个回答
0
投票

一种简单的方法是将块存储在表结构中,然后将它们读回并将数据写回到映像文件中。

这里是示例表结构。

public class Chunk
{
    private int chunkId;
    private byte[] chunkdata;
    private int nextchunkId;
}

从表中读取块的方法

private Chunk getChunk(int index){
   Chunk chunk = null; 
   if(index == 1){ // this assumes that the chunk id starts from 1
      //get and return Chunk where chunkId == 1 from the table
   }
   else{
      // get and return Chunk where nextchunkId == index from the table
   }
   return chunk
}

现在将块直接写入二进制文件

private void mergeChunksToFile(){
   int index = 1; // this assumes that the chunk id starts from 1
   // Create a binary file in append mode to store the data, which is the image
   Chunk chunk = getChunk(index);
   while(chunk != null){
      // Here, write chunk.chunkdata to the binary file

      index = chunk.nextchunkId;

      // get the next chunk
      chunk = getChunk(index);
   }
}

这可能不是最佳解决方案,但是它应该可以帮助您了解如何在不使用任何外部库的情况下进行操作

© www.soinside.com 2019 - 2024. All rights reserved.