3

私のアプリケーションでは、画像を文字列にエンコードおよびデコードしてWebサービスに渡す際に小さな問題に直面しました。ビットマップ画像を取得した後、それをbyte []に​​変換し、文字列値にエンコードしますが、エラーが表示される場合があります。理由がわかりません。そしてもう1つの疑問は、Base64クラスがビットマップイメージを文字列または同じことを行うために利用できる他のツールに変換することだけをサポートしていることです。

前もって感謝します...

4

2 に答える 2

12

OutOfMemoryErrorの場合、以下のコードが役に立ちます。

public String BitMapToString(Bitmap bitmap){
        ByteArrayOutputStream baos=new  ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG,100, baos);
        byte [] b=baos.toByteArray();
        String temp=null;
        try{
        System.gc();
        temp=Base64.encodeToString(b, Base64.DEFAULT);
        }catch(Exception e){
            e.printStackTrace();
        }catch(OutOfMemoryError e){
            baos=new  ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.JPEG,50, baos);
            b=baos.toByteArray();
            temp=Base64.encodeToString(b, Base64.DEFAULT);
            Log.e("EWN", "Out of memory error catched");
        }
        return temp;
  }

基本的に私がしたことは:OutofMemoryErrorをキャッチし、そのキャッチブロックで50%サイズ変更してから、文字列にエンコードします。

于 2012-07-24T09:02:53.607 に答える
2

以下のプロジェクトのサンプルコードをお試しください

Bitmap bmp = (Bitmap) data.getExtras().get("data");

        img.setImageBitmap(bmp);
        btnadd.requestFocus();

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        byte[] b = baos.toByteArray();
        encodedImageString = Base64.encodeToString(b, Base64.DEFAULT);

        byte[] bytarray = Base64.decode(encodedImageString, Base64.DEFAULT);
        Bitmap bmimage = BitmapFactory.decodeByteArray(bytarray, 0,
                bytarray.length);
于 2012-07-24T08:52:08.380 に答える