这是为了在另一个应用程序中使用该文件而创建的用于将图像“库”保存到外部存储器的代码。这是一个包含对象ArrayList的二进制文件。
这是制作主要工作的方法。
public void createLib()
{
File fl = new File("/mnt/sdcard/imgs");
File[] rawLib = fl.listFiles();
TextView text = (TextView) findViewById(R.id.txt1);
ArrayList<Block> myList = new ArrayList<Block>();
try{
for (int i = 0; i < rawLib.length; i++)
{
FileInputStream fis = new FileInputStream(rawLib[i]);
Bitmap bmp = BitmapFactory.decodeStream(fis);
Block tmpBlock = new Block();
tmpBlock.bmp = bmp;
tmpBlock.mozColor = findMidColor(bmp);
myList.add(tmpBlock);
}
}
catch(Exception exc)
{
exc.printStackTrace();
}
try
{
String root = Environment.getExternalStorageDirectory().toString();
File myDir = new File(root + "/saved_images");
myDir.mkdirs();
File file = new File (myDir, "library.lib");
FileOutputStream fos = new FileOutputStream(file);
ObjectOutputStream save = new ObjectOutputStream(fos);
save.writeObject(myList);
save.close();
}
catch (Exception exc)
{
exc.printStackTrace();
}
这是我正在使用的课程
class Block
{
Bitmap bmp;
int mozColor;
}
findMidColor()是我的方法,它工作得很好,所以没有问题。
当我从模拟器外部存储器中提取创建的文件时,我看到该文件的大小约为2.5千字节,但带有图像的原始文件夹大约为2-3兆字节。 结论是程序只保存指向bmp的指针。有没有办法创建包含图像和整数的对象的bynary文件,并在另一个应用程序中重用该文件,如ArrayList或任何其他数组?
答案 0 :(得分:1)
是位图的数据(像素)未保存在Bitmap对象中。他们住在堆里的某个地方。您现在只保存对错误位置的引用。
在您的Block类中,您没有Bitmap
对象,而是可以拥有Bitmap
的路径以及returns
Bitmap
来自该路径的方法。
class Block{
String bitmapPath;
int mozColor;
Bitmap bmp(){
//do something here to encode bitmap from file
}
}
您必须将位图保存到特定路径,并且每次都将其存储到Block.bitmapPath
您可以轻松找到如何将Bitmap
保存到File
并从File
检索