2012-01-28 70 views
0

當我保存位圖時,它將我帶到IOExeption,爲什麼?我不知道:保存位圖 - IO異常

static Bitmap[] bmp = new Bitmap[4]; 

public static void save(FileIO files, int location) { 
    ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
    try { 
     File f = new File(Environment.getExternalStorageDirectory() 
        + File.separator + "test" + File.separator + "mind"); 
     Log.d("path", f.toString()); 
     f.createNewFile(); 
     // write the bytes in file 
     FileOutputStream fo = new FileOutputStream(f); 
     bmp[location].compress(Bitmap.CompressFormat.PNG, 100, bytes); 
     fo.write(bytes.toByteArray()); 
     fo.close(); 
     Log.d("fisnish", "Bitmap saved"); 
    } catch (IOException e) { 
     Log.d("IO", e.getMessage()); 
    } 
} 

logcat的時候我保存:

01-29 00:53:58.020: DEBUG/path(8222): /mnt/sdcard/test/mind 
01-29 00:53:58.060: DEBUG/IO(8222): Permission denied 
01-29 00:53:58.240: DEBUG/dalvikvm(8222): GC_EXTERNAL_ALLOC freed 7K, 53% free 2563K/5379K, external 5375K/6713K, paused 178ms 
01-29 00:54:02.029: DEBUG/dalvikvm(4723): GC_EXPLICIT freed 7K, 53% free 2643K/5511K, external 1625K/2137K, paused 3421ms 

我有我需要(),但它不反正工作的用戶權限。有什麼問題?

+0

你發現這個代碼有任何異常。 – 2012-01-28 21:12:35

+0

是的,當我嘗試使用bmp [我]它給了我一個NullPointerException – Daniel 2012-01-28 21:15:53

+0

不知道,但你有檢查是你的文件在你的位置或沒有。 – 2012-01-28 21:27:40

回答

1

加載聽起來像BitmapFactory.decodeFile的工作。此外,我會直接壓縮到您的文件輸出流:

public static void save(FileIO files, int location) { 
    try { 
     File f = new File(Environment.getExternalStorageDirectory() 
       + File.separator + "numbers" + location); 
     // write the bytes in file 
     FileOutputStream fo = new FileOutputStream(f); 
     bmp[location].compress(Bitmap.CompressFormat.PNG, 40, fo); 
     fo.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
2

通過使用canvas.drawBitmap提供矩陣來嘗試此比例位圖。

public static Bitmap scaleBitmap(Bitmap bitmap, int wantedWidth, int wantedHeight) { 
    Bitmap output = Bitmap.createBitmap(wantedWidth, wantedHeight, Config.ARGB_8888); 
    Canvas canvas = new Canvas(output); 
    Matrix m = new Matrix(); 
    m.setScale((float) wantedWidth/bitmap.getWidth(), (float) wantedHeight/bitmap.getHeight()); 
    canvas.drawBitmap(bitmap, m, new Paint()); 

    return output; 
} 
+0

是什麼原因? – Daniel 2012-01-28 21:51:33

+1

bcoz你得到null – 2012-01-28 21:59:09

2

您是否包含正確的權限?您需要寫入外部存儲權限。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

編輯

嘗試放置文件的目錄中上的SD卡,如:

File f = new File(Environment.getExternalStorageDirectory() 
     + File.separator + "test" + File.Separator + "mind"); 
+0

是的,現在當我檢查堆棧跟蹤時:「拒絕被拒絕」。爲什麼? – Daniel 2012-01-29 00:23:11

+0

請發佈您的logcat異常。這將有助於找出問題 – hooked82 2012-01-29 00:25:48

+0

另外,您嘗試寫入的完整路徑是什麼?它最終成爲/ sdcard/mind嗎?我已經看到了一些您可能需要寫入SDCARD上的文件夾而不是根目錄的情況。 – hooked82 2012-01-29 00:27:37