2016-11-24 7 views
0
に損失することなく、ビットマップに

私の目的は、カメラonPictureTaken 変換する方法バイト[]品質

  • から

    1. キャプチャバイトビットマップにバイト[]に変換され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); 
    
    関連する問題