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);}使用此代码从图像位图解码路径。