我正在尝试选择我画廊中的图像。但是,当我选择large尺寸的图像时,我的应用程序会生成Exception并关闭该应用程序。
Exception
java.lang.RuntimeException: Canvas: trying to draw too large(122880000bytes) bitmap.
at android.graphics.RecordingCanvas.throwIfCannotDraw(RecordingCanvas.java:280)
at android.graphics.BaseRecordingCanvas.drawBitmap(BaseRecordingCanvas.java:88)
at android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:548)
at android.widget.ImageView.onDraw(ImageView.java:1434)
at android.view.View.draw(View.java:21472)
at android.view.View.updateDisplayListIfDirty(View.java:20349)
at android.view.View.draw(View.java:21204)
at android.view.ViewGroup.drawChild(ViewGroup.java:4412)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4171)
at android.view.View.updateDisplayListIfDirty(View.java:20340)
at android.view.View.draw(View.java:21204)
at android.view.ViewGroup.drawChild(ViewGroup.java:4412)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4171)
at android.view.View.draw(View.java:21475)
at android.widget.ScrollView.draw(ScrollView.java:1835)
at android.view.View.updateDisplayListIfDirty(View.java:20349)
at android.view.View.draw(View.java:21204)
at android.view.ViewGroup.drawChild(ViewGroup.java:4412)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4171)
at android.view.View.draw(View.java:21475)
at android.view.View.updateDisplayListIfDirty(View.java:20349)
at android.view.View.draw(View.java:21204)
at android.view.ViewGroup.drawChild(ViewGroup.java:4412)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4171)
at android.view.View.updateDisplayListIfDirty(View.java:20340)
at android.view.View.draw(View.java:21204)
at android.view.ViewGroup.drawChild(ViewGroup.java:4412)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4171)
at android.view.View.updateDisplayListIfDirty(View.java:20340)
at android.view.View.draw(View.java:21204)
at android.view.ViewGroup.drawChild(ViewGroup.java:4412)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4171)
at android.view.View.updateDisplayListIfDirty(View.java:20340)
at android.view.View.draw(View.java:21204)
at android.view.ViewGroup.drawChild(ViewGroup.java:4412)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4171)
at android.view.View.updateDisplayListIfDirty(View.java:20340)
at android.view.View.draw(View.java:21204)
at android.view.ViewGroup.drawChild(ViewGroup.java:4412)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4171)
at android.view.View.draw(View.java:21475)
at com.android.internal.policy.DecorView.draw(DecorView.java:830)
at android.view.View.updateDisplayListIfDirty(View.java:20349)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:575)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:581)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:654)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:3687)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:3482)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2819)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1782)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7785)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1031)
at android.view.Choreographer.doCallbacks(Choreographer.java:854)
at android.view.Choreographer.doFrame(Choreographer.java:789)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1016)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:224)
at android.app.ActivityThread.main(ActivityThread.java:7520)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
我的代码.java
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
try {
if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
CropImage.ActivityResult result = CropImage.getActivityResult(data);
if (resultCode == RESULT_OK) {
//filePath=result.getUri();
filePath = result.getUri();
//selectPostImg.setImageURI(filePath);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 1;
Bitmap bmpSample = BitmapFactory.decodeFile(filePath.getPath(), options);
ByteArrayOutputStream out = new ByteArrayOutputStream();
bmpSample.compress(Bitmap.CompressFormat.JPEG, 1, out);
selectPostImg.setImageBitmap(bmpSample);
Toast.makeText(this, "Image selected", Toast.LENGTH_LONG).show();
}
}
}catch (Exception e){
Log.e("app","err: "+e.getMessage());
}
}
如何选择图像并毫无例外地分配给ImageView?选择图像后,我的活动停止了工作并产生了上述异常。如果所选图像尺寸较小,则代码可以正常工作。
使用Glide库
Glide.with(context).load(yor image address).into(imageView);