Java 压缩和解压缩位图-';活页夹事务失败';
我想在拍照后将图像数据传递给另一个活动或从画廊获取。但是我得到了这个错误“绑定器事务失败”,所以我做了一些研究,我认为这是因为文件太大了,我需要在另一个活动中压缩和解压缩它。但是解压代码似乎不起作用,图像是像素化和模糊的Java 压缩和解压缩位图-';活页夹事务失败';,java,android,bitmap,Java,Android,Bitmap,我想在拍照后将图像数据传递给另一个活动或从画廊获取。但是我得到了这个错误“绑定器事务失败”,所以我做了一些研究,我认为这是因为文件太大了,我需要在另一个活动中压缩和解压缩它。但是解压代码似乎不起作用,图像是像素化和模糊的 Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); 为什么??如何修复它 第一项活动 @Override public void onActivityResult(int requestCod
Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
为什么??如何修复它
第一项活动
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
inputStreamImg = null;
if (resultCode == getActivity().RESULT_OK && data != null) {
if (requestCode == PICK_IMAGE_CAMERA) {
try {
Uri selectedImage = data.getData();
bitmap = (Bitmap) data.getExtras().get("data");
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 0, bytes);
byte[] byteArray = bytes.toByteArray();
goProgressDetailPage(byteArray);
} catch (Exception e) {
e.printStackTrace();
}
} else if (requestCode == PICK_IMAGE_GALLERY) {
Uri selectedImage = data.getData();
if (selectedImage==null){
return;
}
try {
bitmap = MediaStore.Images.Media.getBitmap(context.getContentResolver(), selectedImage);
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 0, bytes);
byte[] byteArray = bytes.toByteArray();
goProgressDetailPage(byteArray);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
public void goProgressDetailPage(byte[] byteArray){
Intent i = new Intent(getContext(), EditProgressActivity.class);
i.putExtra("viewString",byteArray);
getContext().startActivity(i);
}
byte[] bytes = intent.getByteArrayExtra("viewString");
Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
//decompress fail, the image is blur
base64img = Base64.encodeToString(bytes, Base64.DEFAULT);
Log.d("image uploaded", ""+base64img);
//upload base64 to server...
第二项活动
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
inputStreamImg = null;
if (resultCode == getActivity().RESULT_OK && data != null) {
if (requestCode == PICK_IMAGE_CAMERA) {
try {
Uri selectedImage = data.getData();
bitmap = (Bitmap) data.getExtras().get("data");
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 0, bytes);
byte[] byteArray = bytes.toByteArray();
goProgressDetailPage(byteArray);
} catch (Exception e) {
e.printStackTrace();
}
} else if (requestCode == PICK_IMAGE_GALLERY) {
Uri selectedImage = data.getData();
if (selectedImage==null){
return;
}
try {
bitmap = MediaStore.Images.Media.getBitmap(context.getContentResolver(), selectedImage);
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 0, bytes);
byte[] byteArray = bytes.toByteArray();
goProgressDetailPage(byteArray);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
public void goProgressDetailPage(byte[] byteArray){
Intent i = new Intent(getContext(), EditProgressActivity.class);
i.putExtra("viewString",byteArray);
getContext().startActivity(i);
}
byte[] bytes = intent.getByteArrayExtra("viewString");
Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
//decompress fail, the image is blur
base64img = Base64.encodeToString(bytes, Base64.DEFAULT);
Log.d("image uploaded", ""+base64img);
//upload base64 to server...
相关问题:
正如你所说
您需要在捕获图像后传递图像。因此,概念是您只需拍摄照片并将其保存到设备,然后获取图像位置的路径。现在只需在整个活动中传递路径即可
根据您的需要,您不必压缩或解压缩图像。
uriselectedimage=data.getData()代码>通过这个?你有关于保存图像和解码位图路径的教程或参考资料吗?你可以试试这个。我想这会解决你的问题,尽管我现在使用了压缩方法。Uri mUri=getImageUri(getApplicationContext(),mImage);public Uri getImageUri(Context inContext,Bitmap mImage){ByteArrayOutputStream bytes=new ByteArrayOutputStream();mImage.compress(Bitmap.CompressFormat.JPEG,100,bytes);String path=Images.Media.insertImage(inContext.getContentResolver(),mImage,“ImageTitle”,null);返回Uri.parse(path);}使用此代码从图像位图解码路径。