2014-09-22 128 views
4

我想將位圖圖像保存到手機內的目錄(圖庫)。該應用程序正在Xamarin開發,因此代碼是C#。將位圖保存到文件 - Xamarin,Monodroid

我似乎無法弄清楚如何製作一個目錄,並保存一個位圖。有什麼建議麼?

public void createBitmap(View view){ 
    view.DrawingCacheEnabled = true; 
    view.BuildDrawingCache (true); 
    Bitmap m_Bitmap = view.GetDrawingCache(true); 

    String storagePath = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath; 
    Java.IO.File storageDirectory = new Java.IO.File(storagePath); 
    //storageDirectory.mkdirs(); 


    //save the bitmap 
    //MemoryStream stream = new MemoryStream(); 
    //m_Bitmap.Compress (Bitmap.CompressFormat.Png, 100, stream); 
    //stream.Close(); 


    try{ 

     String filePath = storageDirectory.ToString() + "APPNAME.png"; 
     FileOutputStream fos = new FileOutputStream (filePath); 
     BufferedOutputStream bos = new BufferedOutputStream(fos); 
     m_Bitmap.Compress (Bitmap.CompressFormat.Png, 100, bos); 
     bos.Flush(); 
     bos.Close(); 
    } catch (Java.IO.FileNotFoundException e) { 
     System.Console.WriteLine ("FILENOTFOUND"); 
    } catch (Java.IO.IOException e) { 
     System.Console.WriteLine ("IOEXCEPTION"); 
    } 

回答

3

變化:

String filePath = storageDirectory.ToString() + "APPNAME.png"; 

要:

String filePath = Path.Combine(storageDirectory.ToString(), "APPNAME.png"); 

你的原代碼附加文件名中的路徑名的最後一個文件夾不添加路徑分隔符。例如,\data\data\sdcard01的路徑將創建一個文件路徑\data\data\sdcard01APPNAME.png。使用Path.Combine()可確保在追加目錄時使用路徑分隔符。

16

這這裏是一個Bitmap作爲PNG -file導出到SD卡一個苗條方式只用C#東西:

void ExportBitmapAsPNG(Bitmap bitmap) 
{ 
    var sdCardPath = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath; 
    var filePath = System.IO.Path.Combine(sdCardPath, "test.png"); 
    var stream = new FileStream(filePath, FileMode.Create); 
    bitmap.Compress(Bitmap.CompressFormat.Png, 100, stream); 
    stream.Close(); 
} 
+1

你是怎麼寫出來的原始數據BMP不壓縮? – gonzobrains 2016-06-29 18:03:04

+0

@gonzobrains我不知道這是可能的。抱歉。 – kaolick 2016-06-30 07:18:13

+1

您應該使用「.Dispose()」從內存中釋放蒸汽和位圖,或者使用「using(){}」可能會更好。 – 2017-10-07 21:57:18