2012-09-20 70 views
1

這是我創建的用於將圖像「庫」保存到外部存儲器以便在另一個應用程序中使用該文件的代碼。這是一個包含對象的ArrayList的二進制文件。將對象保存爲二進制文件到外部存儲器? (Android)

這是什麼讓主要工作的方法。

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兆字節。 Conslusion是程序只保存指向該bmp的指針。有什麼辦法可以創建包含圖像和整數的對象的副本文件,並在另一個應用程序(如ArrayList或任何其他數組)中重用該文件?

回答

1

是位圖的數據(像素)不保存在位圖對象中。他們住在堆的某個地方。您現在只保存對錯誤位置的引用。

在你的格擋類,而不是有Bitmap對象,你可以擁有到Bitmap的路徑,並從路徑的方法returns一個Bitmap

class Block{ 
    String bitmapPath; 
    int mozColor; 
    Bitmap bmp(){ 
     //do something here to encode bitmap from file 
    } 
} 

您必須將位圖保存到一個特定的路徑,並將其存儲到Block.bitmapPath每次

你可以很容易地找到如何將Bitmap保存到FileFile

檢索
相關問題