用 outputImage.toString() 寫入文件保存的是對象描述字符串,非圖片二進制數據。正確:Bitmap.compress() 直接輸出到 FileOutputStream。
OutputStreamWriter osw = new OutputStreamWriter(context.openFileOutput(fileName, MODE_PRIVATE));
osw.write(outputImage.toString()); // ❌ 寫入文本描述
public String saveBitmapToInternalStorage(Context context, Bitmap bitmap) {
String fileName = System.currentTimeMillis() + ".png";
try (FileOutputStream fos = context.openFileOutput(fileName, Context.MODE_PRIVATE)) {
bitmap.compress(Bitmap.CompressFormat.PNG, 90, fos); // ✅ 直接壓縮寫入流
fos.flush();
return fileName;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
compress(format, quality, stream) 將編碼後的圖片數據直接寫入輸出流。try-with-resources 自動關閉流(Java 7+)。/data/data/pkg/files/filename,應用私有,無需權限。Bitmap.compress 直通流,圖片存儲高效正確。