2012-02-29 32 views
0

我一直在为这个问题奋斗了几天,现在我真的不知道是什么问题。 我CameraView类具有下面的代码:当用相机拍摄照片并发送到服务器端,丢失图片质量

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(); 
    } 
}; 

然后,我的活动,接受这样的结果:

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坚持。 当我的下一个acticity检索此数据:

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

质量是完全搞砸了。就像它是由一个0.3mpx相机拍摄的。 我正在使用三星Galaxy Nexus,所以我相信我的屏幕正在造成更糟。这些图像在CLOB中大小约为2.7kb ......所以我猜测数据在发送到我的服务器时正在丢失......我不确定。

任何有见过这种?

感谢, 费利佩

回答

2

你在压缩时的图像质量设置为0。相反,将其设置为更大。请参阅docs。例如:

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

我以为0意味着“没有压缩”。谢谢你的协助! – 2012-02-29 08:57:01

相关问题