在Android中,Base64编码需要太长时间

5

我正在使用相机捕获图像。 我将文件保存在公共照片目录中,并将Uri保存到该文件。

我希望将该图像保存为Base64字符串,并将其放入HashMap中,稍后再将其放入XML文件中。

protected Void doInBackground(Void...voids) {
        options.inJustDecodeBounds = false;
        //Bitmap bmp = BitmapFactory.decodeFile(imageFilePath,options);
        InputStream in = null;
        try {
            in = getContentResolver().openInputStream(Uri.parse(mCurrentPhotoPath));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        options.inSampleSize = 2;
        Bitmap image = BitmapFactory.decodeStream(in,null,options);
        int imgHeight = image.getHeight();
        int imgWidth = image.getWidth();
        while(imgHeight>2000){
            imgHeight = imgHeight / 2;
        }
        while(imgWidth>2000){
            imgWidth = imgWidth / 2;
        }

        Bitmap test = Bitmap.createScaledBitmap(image,imgWidth,imgHeight,false);

        String stest = base64EncodeDecode.encodeToBase64(test);


        items.put("image",base64EncodeDecode.encodeToBase64(test);
        return null;
}

Base64编码时间太长。 encodeToBase64方法。

public String encodeToBase64(Bitmap image) {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    image.compress(Bitmap.CompressFormat.JPEG, 100, baos);
    byte[] b = baos.toByteArray();

    return Base64.encodeToString(b, Base64.DEFAULT);
}

你能告诉我在编码时是否有做错什么吗?

希望我的问题已经表述清楚。

祝好!


"太长"的长度是多少?字节数组有多大?你如何诊断出它是Base64编码而不是(比如说)压缩引起的时间延迟? - Jon Skeet
为什么你要多次编码呢?String stest = base64EncodeDecode.encodeToBase64(test); taskItems.put("image",base64EncodeDecode.encodeToBase64(BitmapFactory.decodeStream(in,null,options))); 第一次编码是针对你已经进行采样的位图。在采样之后,你想要对真实的位图进行编码吗? - Mustansar Saeed
是的,我看到了并且编辑了代码!感谢建议。我不知道为什么在调试时编码需要很长时间。但在运行时就是“正常”的。这意味着您不会注意到任何编码问题。现在当我将数据传递到其他“Activity”时,我得到了“!!! FAILED BINDER TRANSACTION !!!”。 - lainio
1个回答

1
如果你遇到!!! FAILED BINDER TRANSACTION !!!错误,很可能是因为你向另一个Activity传递了太多数据,有一个发送数据的限制。尝试将图像压缩到50%或30% image.compress(Bitmap.CompressFormat.JPEG, 50, baos);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接