0
我的目標是從攝像機onPictureTaken 如何轉換的byte []沒有損失位圖質量
- 捕獲字節的byte []轉換爲位圖BitmapFactory.decodeByteArray
- 保存位圖
我有步驟2中的問題。此步由於某種原因使PICT脲含有鋸齒狀邊緣和質量損失。如果我執行步驟1並將字節直接保存到文件中(不執行第2步),則圖像看起來好多了。
如何在不丟失質量的情況下將字節轉換爲位圖(步驟2)?
@Override
public void onPictureTaken(byte[] byteData, Camera camera) {
String filePath = "PATH_TO_IMAGE_FILE";
//Save bytes directly
{
File pictureFile = new File(filePath + ".fromBytes");
try {
FileOutputStream fos = new FileOutputStream(pictureFile);
fos.write(byteData);
fos.close();
} catch (Exception error) {
Log.d("File not saved: " , error.getMessage());
}
}
//convert to bitmap -> convert to bytes -> then save
{
//I think this is where is loses quality ??
Bitmap decodedBitmap = BitmapFactory.decodeByteArray(byteData, 0, byteData.length);
//
ByteArrayOutputStream blob = new ByteArrayOutputStream();
decodedBitmap.compress(Bitmap.CompressFormat.PNG, 100, blob);
byte[] bitmapdata = blob.toByteArray();
File pictureFile = new File(filePath + ".fromBitmap");
try {
FileOutputStream fos = new FileOutputStream(pictureFile);
fos.write(bitmapdata);
fos.close();
} catch (Exception error) {
Log.d("File not saved: " , error.getMessage());
}
}
}
感謝
「這一步出於某種原因使得畫面包含鋸齒邊緣和質量的損失」 - 不是默認的。請提供[mcve]展示您嘗試過的內容。 – CommonsWare