2016-11-24 29 views
0

我的目標是從攝像機onPictureTaken 如何轉換的byte []沒有損失位圖質量

    1. 捕獲字節的byte []轉換爲位圖BitmapFactory.decodeByteArray
    2. 保存位圖

    我有步驟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()); 
    
         } 
        } 
    } 
    

    感謝

  • +1

    「這一步出於某種原因使得畫面包含鋸齒邊緣和質量的損失」 - 不是默認的。請提供[mcve]展示您嘗試過的內容。 – CommonsWare

    回答

    0

    變化:

    decodedBitmap.compress(Bitmap.CompressFormat.PNG, 100, blob); 
    

    這樣:

    decodedBitmap.compress(Bitmap.CompressFormat.JPEG, 100, blob);