【发布时间】:2012-02-29 00:08:02
【问题描述】:
我已经在这个问题上苦苦挣扎了几天,我真的不知道是什么问题。 我的 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();
}
};
然后,我的 Activity 收到了这个结果:
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)));
质量完全搞砸了。就像它是由 0.3mpx 相机拍摄的一样。 我正在使用三星 Galaxy Nexus,所以我相信我的屏幕会让情况变得更糟。这些图像在 CLOB 中大约有 2.7kb 大小......所以我猜数据在发送到我的服务器时会丢失......我不太确定。
有人见过吗?
谢谢, 费利佩
【问题讨论】: