2010-10-13 74 views
5

我正在使用android內置相機拍攝照片,然後將相同的圖片附加到電子郵件中,當我在1.6設備中測試此功能時,我可以將圖片命名爲在內置攝像頭採取,但在2.1,畫面具有由設備給出一個名字即將位圖保存到SD卡中,然後將其壓縮到android

如何在2.1內置攝像頭的圖像給用戶定義的名稱..

,以避免這樣的問題我現在的儲蓄圖像手動但當我嘗試通過意圖作爲位圖獲取圖像,然後使用壓縮方法將其保存到SD卡時

此方法處理來自內置相機的結果

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    File file = new File(Environment.getExternalStorageDirectory() 
    + "/test.png"); 
    switch (requestCode) 
    { 
    case PHOTO_ACTION: 
    if (resultCode == RESULT_CANCELED) 
    { 
    addPhoto = false; 
    Toast.makeText(this, "Canceled ", Toast.LENGTH_LONG).show(); 
    break; 
    } else if (resultCode == RESULT_OK) 
    { 
    Bundle b = data.getExtras(); 
    Bitmap bm = (Bitmap) b.get("data"); 

    FileOutputStream out; 
    try 
    { 

    out = new FileOutputStream(file); 
    bm.compress(Bitmap.CompressFormat.JPEG, 100, out); 
    out.flush(); 
    out.close(); 
    scanPhoto(file.toString()); 
    out = null; 
    addPhoto = true; 
    } catch (Exception e) 
     { 
     e.printStackTrace(); 
     addPhoto = false; 
     } 

但是,當我存儲像這樣我得到兩個圖像。一個系統給出名稱,另一個系統給出我的名字。但用戶定義的圖像是具有較少的分辨率,所以我的問題是如何保存位圖與更多的分辨率與壓縮它.. 請幫助....我

+0

我遇到同樣的問題,因爲你有。你有沒有設法解決它?如果是的話,你能否也請把你的解決方案分享給我?謝謝! – Mellon 2010-11-19 11:12:53

+0

我有同樣的問題,直到現在才發現沒有解決方案.. – viv 2014-08-22 08:18:38

回答

5

如果你只是想保存位圖沒有損失質量嘗試使用CompressFormat.PNG而不是JPEG,我見過有人遇到過這個問題。嘗試改變:

bm.compress(Bitmap.CompressFormat.JPEG, 100, out); 

有:

bm.compress(Bitmap.CompressFormat.PNG, 100, out); 

,看看它,它幫助。

+0

即使在JPEG中設置爲100%後,它的清晰度和質量也有所下降。當我使用PNG壓縮時,它具有相同的清晰度。謝謝 :-) – 2017-10-23 18:12:34

2

除了上面的裏克答案,請確保您提供一個URI的相機意圖,它可以保存完整的形象,否則它會返回意圖的數據參數的拇指圖像。 所以它會像:

Intent photoPickerIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
imgFile = new File("Cache directory","img.png"); //== where you want full size image 
photoPickerIntent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(imgFile)); 
startActivityForResult(photoPickerIntent, PickPhoto); 

這是我在做的錯誤。