java - 如何将 Bitmap ArrayList 保存到文件

标签 java android image list bitmap

我正在尝试将位图列表保存到文件中。基本上,我想存储它以供将来引用,这样当用户从图库中选择图像时,即使应用程序关闭,它也会保留在那里。

这就是我想做的事?但是得到了一些异常——BufferUnderFlowException、OutOfMemoryException。问题似乎是位图列表的内存非常大。有没有更好的方法来做到这一点?

    final   List<Bitmap> bitmapcontent=new ArrayList<Bitmap>();
     ImageView imageView;
Gallery gallery;

private static byte[] bytesar;
ByteBuffer dst;
private void savethebitmap() throws IOException, ClassNotFoundException {

    try {
        FileOutputStream fos = openFileOutput("bitmapimage", Context.MODE_PRIVATE);
        ObjectOutputStream out=new ObjectOutputStream(fos);
        out.writeInt(bitmapcontent.size());

        for(int i=0;i<bitmapcontent.size();i++){

            out.writeInt(bitmapcontent.get(i).getRowBytes());
            out.writeInt(bitmapcontent.get(i).getHeight());
            out.writeInt(bitmapcontent.get(i).getWidth());


            int bmSize = bitmapcontent.get(i).getRowBytes() * bitmapcontent.get(i).getHeight();
            if(dst==null || bmSize > dst.capacity())
                dst= ByteBuffer.allocate(bmSize);

            out.writeInt(dst.capacity());
            dst.position(0);

            bitmapcontent.get(i).copyPixelsToBuffer(dst);
            if(bytesar==null || bmSize > bytesar.length)
                bytesar=new byte[bmSize];

            dst.position(0);
            dst.get(bytesar);


            out.write(bytesar, 0, bytesar.length);

        }


    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

private void loadthebitmap() throws IOException,ClassNotFoundException{

    try {
        freeBitmaps();
        FileInputStream fos = openFileInput("bitmapimage");
        ObjectInputStream in=new ObjectInputStream(fos);
        int size=in.readInt();
        for(int i=0;i<size;i++){

             int height=in.readInt();
                int width=in.readInt();

                int bmSize=in.readInt();




                if(bytesar==null || bmSize > bytesar.length)
                    bytesar= new byte[bmSize];


                int offset=0;

                while(in.available()>0){
                    offset=offset + in.read(bytesar, offset, in.available());
                }

                if(dst==null || bmSize > dst.capacity())
                    dst= ByteBuffer.allocate(bmSize);
                dst.position(0);
                dst.put(bytesar);
                dst.position(0);
            Bitmap    myVideoScreenshotBm=Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
                myVideoScreenshotBm.copyPixelsFromBuffer(dst);
             bitmapcontent.add(myVideoScreenshotBm);



        }


    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

最佳答案

out.writeObject(bitmapContent) 和 Bob(应该是)你的叔叔...如果你的内存不足,请使用建议来增加内存大小。还有further tips以及。祝一切顺利,让我知道你的进展如何。

关于java - 如何将 Bitmap ArrayList 保存到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13908258/

相关文章:

java - 大比较任务的估计

java - SSLHandshakeException : SSL handshake aborted: ssl=0xbe6af938: I/O error during system call, 连接由对等方重置

java - 如何将android studio中的sqlite数据库存储到设备内存?

java - 处理小部件内的多个按钮 - Android

image - codenameone 下载其他应用程序可见的文件/图像

java - Spring 与 mongo-java-driver 使用 Azure Cosmos DB 作为 MongoDB

Java:定义变量后找不到变量

java - 如何在 Java 中相对于单个线程同步一组多个线程

java - 在 JSP 中显示文件系统存储的图像

python - 在 Python 中使用名称中带有字符串和迭代索引的 savefig