内存不足在将位图转换为字节数组时,摄像机图像出现错误
问题描述:
经历了很多内存分配错误解决方案之后,我暗示并尝试了很多针对我的应用程序的应用程序,但我不知道它为什么仍然崩溃内存。它只发生在相机文件夹图像不适用于其他人。请帮我纠正我的代码,如果它在某个地方是错误的。 第一个是在活动结果使用图像意图选择图像之后:内存不足在将位图转换为字节数组时,摄像机图像出现错误
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
Uri filePath = data.getData();
try {
//getting image from gallery
bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
//Setting image to ImageView
ivImage.setImageBitmap(bitmap);
Uri selectedImageUri = data.getData();
} catch (Exception e) {
e.printStackTrace();
}
}
另外还配有我在哪里通过转换位图来字节数组上传图像服务器的方法:
public void upload()
{
progressDialog = new ProgressDialog(AddPropertyThird.this);
progressDialog.setMessage("Uploading, please wait...");
progressDialog.show();
//converting image to base64 string
ByteArrayOutputStream baos = new ByteArrayOutputStream();
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = false;
options.inPreferredConfig = Bitmap.Config.RGB_565;
options.inDither = true;
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] imageBytes = stream.toByteArray();
bitmap.recycle();
final String imageString = Base64.encodeToString(imageBytes, Base64.DEFAULT);
//sending image to server
StringRequest request = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() {
@Override
public void onResponse(String s) {
progressDialog.dismiss();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Log.e("volleyerror", "" + volleyError);
}
}) {
//adding parameters to send
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> parameters = new HashMap<String, String>();
parameters.put("ImgStr", imageString);
return parameters;
}
};
RequestQueue rQueue = Volley.newRequestQueue(AddPropertyThird.this);
rQueue.add(request);
}
这是我的logcat错误:
E/dalvikvm-heap: Out of memory on a 4192272-byte allocation.
Out of memory on a 4186240-byte allocation.
Out of memory on a 2089032-byte allocation.
FATAL EXCEPTION: main
java.lang.OutOfMemoryError
java.io.ByteArrayOutputStream.toByteArray(ByteArrayOutputStream.java:122)
答
用于如何同时避免内存不足的错误加载图像的第一个错误check out this question。
你得到一个内存不足的错误与ByteArray的,因为你拉的图像到内存从流上线
byte[] imageBytes = stream.toByteArray();
所以不是你想避免这样做。 Check out this answer。
+0
你能解释一下吗?实际上在他们使用multipart进行图片上传的链接中,那不是我的情况。 – user1111
http://stackoverflow.com/questions/477572/strange-out-of-memory-issue-while-loading-an-image-to-a-bitmap-object ...希望这会帮助你。 –
[将图像加载到位图对象时出现内存不足的问题]的可能重复(http://stackoverflow.com/questions/477572/strange-out-of-memory-issue-while-loading-an-image-位图对象) –
我已经通过了推荐的链接。它没有解决问题@JaiminThakkar – user1111