私のアプリケーションでは、画像を文字列にエンコードおよびデコードしてWebサービスに渡す際に小さな問題に直面しました。ビットマップ画像を取得した後、それをbyte []に変換し、文字列値にエンコードしますが、エラーが表示される場合があります。理由がわかりません。そしてもう1つの疑問は、Base64クラスがビットマップイメージを文字列または同じことを行うために利用できる他のツールに変換することだけをサポートしていることです。
前もって感謝します...
私のアプリケーションでは、画像を文字列にエンコードおよびデコードしてWebサービスに渡す際に小さな問題に直面しました。ビットマップ画像を取得した後、それをbyte []に変換し、文字列値にエンコードしますが、エラーが表示される場合があります。理由がわかりません。そしてもう1つの疑問は、Base64クラスがビットマップイメージを文字列または同じことを行うために利用できる他のツールに変換することだけをサポートしていることです。
前もって感謝します...
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%サイズ変更してから、文字列にエンコードします。
以下のプロジェクトのサンプルコードをお試しください
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);