在我的应用程序中,我在将图像编码和解码为字符串并将其传递给 Web 服务时遇到了一个小问题。获取位图图像后,我将其转换为 byte[] 并编码为 String 值,但在某些情况下它会显示错误,我不知道它为什么会出现。还有一个疑问是 Base64 类只支持将位图图像转换为字符串或任何其他可用的工具来做同样的事情。
提前致谢...
在我的应用程序中,我在将图像编码和解码为字符串并将其传递给 Web 服务时遇到了一个小问题。获取位图图像后,我将其转换为 byte[] 并编码为 String 值,但在某些情况下它会显示错误,我不知道它为什么会出现。还有一个疑问是 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);