2012-02-29 10 views
0

私はこの問題に数日間苦労しています。問題は何か分かりません。カメラで写真を撮ってサーバー側に送信すると、画質が低下する

Camera.PictureCallback photoCallback = new Camera.PictureCallback() { 
    public void onPictureTaken(byte[] imageData, Camera camera) { 
     Intent mIntent = new Intent(); 
     mIntent.putExtra(GeneralCodes.CREATE_NEW_ACCOUNT_PROFILE_PICTURE, imageData); 
     setResult(Activity.RESULT_OK, mIntent); 
     finish(); 
    } 
}; 

そして、この結果を受けて、私のアクティビティー: マイCameraViewクラスには、次のコードを持っている

ImageView i = (ImageView) findViewById(R.id.createAccounProfileImage); 
Bitmap yourSelectedImage = FileUtilities.createBitmapBasedOnByteImage(data.getByteArrayExtra(GeneralCodes.CREATE_NEW_ACCOUNT_PROFILE_PICTURE), getResources().getDisplayMetrics().density); 

finalImage=yourSelectedImage; 
      i.setImageBitmap(BitmapUtils.getRoundedCornerBitmap(finalImage, Math.min(finalImage.getWidth(), finalImage.getHeight()), true));   

方法FileUtilities.createBitmapBasedOnByteImageが実際にやっているだけの事はただBitmapFactory.decodeByteArrayです()呼び出し。

その後、私の次のステップは、自分のサーバーにこのビットマップを送信している:

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    if(finalImage!=null)finalImage.compress(Bitmap.CompressFormat.JPEG, 0, baos); 
    byte[] data = baos.toByteArray(); 

    pairs.add(new BasicNameValuePair("PROFILE_PIC_DATA", Base64.encodeToString(data, Base64.DEFAULT)));  

情報は私のサーバーに送信され、画像がCLOBに保存されます。

bitmap = BitmapFactory.decodeStream(createInputStream(Base64.decode(obj.getString("photo_image"), Base64.DEFAULT))); 

品質が完全に台無しにされています。私の次のacticityは、このデータを取得し 。それは0.3mpxのカメラで撮られたようです。 私はSamsung Galaxy Nexusを使用していますので、画面が悪化する原因になっていると思います。画像はCLOB内で約2.7kbのサイズを持っています。だから私のサーバーに送信するときにデータが失われていると推測しています...本当にわかりません。

誰でもこれを見たことがありますか?

おかげで、 フェリペ

答えて

2

圧縮するときは、0に画質を設定しています。代わりにそれをもっと大きなものに設定してください。 docsを参照してください。次のようなものがあります。

if(finalImage!=null)finalImage.compress(Bitmap.CompressFormat.JPEG, 80, baos); 
+0

「圧縮しない」とは思っていました。私を助けてくれてありがとう! –

関連する問題