为什么ImageView停止在选定的Android图像上工作?

问题描述 投票:1回答:1

我正在尝试选择我画廊中的图像。但是,当我选择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?选择图像后,我的活动停止了工作并产生了上述异常。如果所选图像尺寸较小,则代码可以正常工作。

android android-intent android-activity android-imageview android-bitmap
1个回答
0
投票

使用Glide库

Glide.with(context).load(yor image address).into(imageView);
© www.soinside.com 2019 - 2024. All rights reserved.