Kamel-Media / Kamel

Kotlin asynchronous media loading and caching library for Compose.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Image too large

HaniFakhouri opened this issue · comments

Platform: Android
Android version: 13
Kamel version: 0.9.0
Compose multiplatform version: 1.5.11
Kotlin version: 1.9.21
Used image URL: https://1000logos.net/wp-content/uploads/2020/10/Costa-Coffee-Logo.png
Image size is ~210KB

The image loads without any problems on ios.

I am getting the below runtime exception when trying to load the image in the url:

21:13:51.064 AndroidRuntime           E  FATAL EXCEPTION: main
                                         Process: com.myapplication.MyApplication, PID: 8137
                                         java.lang.RuntimeException: Canvas: trying to draw too large(160000000bytes) bitmap.
                                         	at android.graphics.RecordingCanvas.throwIfCannotDraw(RecordingCanvas.java:266)
                                         	at android.graphics.BaseRecordingCanvas.drawBitmap(BaseRecordingCanvas.java:98)
                                         	at androidx.compose.ui.graphics.AndroidCanvas.drawImageRect-HPBpro0(AndroidCanvas.android.kt:271)
                                         	at androidx.compose.ui.graphics.drawscope.CanvasDrawScope.drawImage-AZ2fEMs(CanvasDrawScope.kt:263)
                                         	at androidx.compose.ui.node.LayoutNodeDrawScope.drawImage-AZ2fEMs(Unknown Source:39)
                                         	at androidx.compose.ui.graphics.drawscope.DrawScope.drawImage-AZ2fEMs$default(DrawScope.kt:510)
                                         	at androidx.compose.ui.graphics.painter.BitmapPainter.onDraw(BitmapPainter.kt:93)
                                         	at androidx.compose.ui.graphics.painter.Painter.draw-x_KDEd0(Painter.kt:212)
                                         	at androidx.compose.ui.draw.PainterNode.draw(PainterModifier.kt:342)
                                         	at androidx.compose.ui.node.LayoutNodeDrawScope.drawDirect-x_KDEd0$ui_release(LayoutNodeDrawScope.kt:105)
                                         	at androidx.compose.ui.node.LayoutNodeDrawScope.draw-x_KDEd0$ui_release(LayoutNodeDrawScope.kt:86)
                                         	at androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:365)
                                         	at androidx.compose.ui.node.NodeCoordinator.draw(NodeCoordinator.kt:354)
                                         	at androidx.compose.ui.node.LayoutModifierNodeCoordinator.performDraw(LayoutModifierNodeCoordinator.kt:182)
                                         	at androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:362)
                                         	at androidx.compose.ui.node.NodeCoordinator.access$drawContainedDrawModifiers(NodeCoordinator.kt:54)
                                         	at androidx.compose.ui.node.NodeCoordinator$invoke$1.invoke(NodeCoordinator.kt:384)
                                         	at androidx.compose.ui.node.NodeCoordinator$invoke$1.invoke(NodeCoordinator.kt:383)
                                         	at androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:2299)
                                         	at androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe(SnapshotStateObserver.kt:467)
                                         	at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:230)
                                         	at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:133)
                                         	at androidx.compose.ui.node.NodeCoordinator.invoke(NodeCoordinator.kt:383)
                                         	at androidx.compose.ui.node.NodeCoordinator.invoke(NodeCoordinator.kt:54)
                                         	at androidx.compose.ui.platform.RenderNodeApi29.record(RenderNodeApi29.android.kt:209)
                                         	at androidx.compose.ui.platform.RenderNodeLayer.updateDisplayList(RenderNodeLayer.android.kt:305)
                                         	at androidx.compose.ui.platform.RenderNodeLayer.drawLayer(RenderNodeLayer.android.kt:246)
                                         	at androidx.compose.ui.node.NodeCoordinator.draw(NodeCoordinator.kt:349)
                                         	at androidx.compose.ui.node.LayoutModifierNodeCoordinator.performDraw(LayoutModifierNodeCoordinator.kt:182)
                                         	at androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:362)
                                         	at androidx.compose.ui.node.NodeCoordinator.draw(NodeCoordinator.kt:354)
                                         	at androidx.compose.ui.node.LayoutModifierNodeCoordinator.performDraw(LayoutModifierNodeCoordinator.kt:182)
                                         	at androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:362)
                                         	at androidx.compose.ui.node.NodeCoordinator.draw(NodeCoordinator.kt:354)
                                         	at androidx.compose.ui.node.LayoutNode.draw$ui_release(LayoutNode.kt:922)
                                         	at androidx.compose.ui.node.InnerNodeCoordinator.performDraw(InnerNodeCoordinator.kt:174)
                                         	at androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:362)
                                         	at androidx.compose.ui.node.NodeCoordinator.draw(NodeCoordinator.kt:354)
                                         	at androidx.compose.ui.node.LayoutModifierNodeCoordinator.performDraw(LayoutModifierNodeCoordinator.kt:182)
                                         	at androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:362)
                                         	at androidx.compose.ui.node.NodeCoordinator.draw(NodeCoordinator.kt:354)
                                         	at androidx.compose.ui.node.LayoutModifierNodeCoordinator.performDraw(LayoutModifierNodeCoordinator.kt:182)
21:13:51.065 AndroidRuntime           E  	at androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:362)
                                         	at androidx.compose.ui.node.NodeCoordinator.draw(NodeCoordinator.kt:354)
                                         	at androidx.compose.ui.node.LayoutNode.draw$ui_release(LayoutNode.kt:922)
                                         	at androidx.compose.ui.node.InnerNodeCoordinator.performDraw(InnerNodeCoordinator.kt:174)
                                         	at androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:362)
                                         	at androidx.compose.ui.node.NodeCoordinator.draw(NodeCoordinator.kt:354)
                                         	at androidx.compose.ui.node.LayoutModifierNodeCoordinator.performDraw(LayoutModifierNodeCoordinator.kt:182)
                                         	at androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:362)
                                         	at androidx.compose.ui.node.NodeCoordinator.draw(NodeCoordinator.kt:354)
                                         	at androidx.compose.ui.node.LayoutNode.draw$ui_release(LayoutNode.kt:922)
                                         	at androidx.compose.ui.node.InnerNodeCoordinator.performDraw(InnerNodeCoordinator.kt:174)
                                         	at androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:362)
                                         	at androidx.compose.ui.node.NodeCoordinator.draw(NodeCoordinator.kt:354)
                                         	at androidx.compose.ui.node.LayoutModifierNodeCoordinator.performDraw(LayoutModifierNodeCoordinator.kt:182)
                                         	at androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:362)
                                         	at androidx.compose.ui.node.NodeCoordinator.access$drawContainedDrawModifiers(NodeCoordinator.kt:54)
                                         	at androidx.compose.ui.node.NodeCoordinator$invoke$1.invoke(NodeCoordinator.kt:384)
                                         	at androidx.compose.ui.node.NodeCoordinator$invoke$1.invoke(NodeCoordinator.kt:383)
                                         	at androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:2299)
                                         	at androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe(SnapshotStateObserver.kt:467)
                                         	at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:230)
                                         	at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:133)
                                         	at androidx.compose.ui.node.NodeCoordinator.invoke(NodeCoordinator.kt:383)
                                         	at androidx.compose.ui.node.NodeCoordinator.invoke(NodeCoordinator.kt:54)
                                         	at androidx.compose.ui.platform.RenderNodeApi29.record(RenderNodeApi29.android.kt:209)
                                         	at androidx.compose.ui.platform.RenderNodeLayer.updateDisplayList(RenderNodeLayer.android.kt:305)
                                         	at androidx.compose.ui.platform.RenderNodeLayer.drawLayer(RenderNodeLayer.android.kt:246)
                                         	at androidx.compose.ui.node.NodeCoordinator.draw(NodeCoordinator.kt:349)
                                         	at androidx.compose.ui.node.LayoutNode.draw$ui_release(LayoutNode.kt:922)
                                         	at androidx.compose.ui.node.InnerNodeCoordinator.performDraw(InnerNodeCoordinator.kt:174)
                                         	at androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:362)
                                         	at androidx.compose.ui.node.NodeCoordinator.draw(NodeCoordinator.kt:354)
                                         	at androidx.compose.ui.node.LayoutNode.draw$ui_release(LayoutNode.kt:922)
                                         	at androidx.compose.ui.platform.AndroidComposeView.dispatchDraw(AndroidComposeView.android.kt:1133)
                                         	at android.view.View.draw(View.java:24409)
                                         	at android.view.View.updateDisplayListIfDirty(View.java:23267)
                                         	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4732)
                                         	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4704)
                                         	at android.view.View.updateDisplayListIfDirty(View.java:23214)
                                         	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4732)
                                         	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4704)
                                         	at android.view.View.updateDisplayListIfDirty(View.java:23214)
                                         	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4732)
                                         	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4704)
                                         	at android.view.View.updateDisplayListIfDirty(View.java:23214)
                                         	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4732)
                                         	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4704)
                                         	at android.view.View.updateDisplayListIfDirty(View.java:23214)
21:13:51.066 AndroidRuntime           E  	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4732)
                                         	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4704)
                                         	at android.view.View.updateDisplayListIfDirty(View.java:23214)
                                         	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4732)
                                         	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4704)
                                         	at android.view.View.updateDisplayListIfDirty(View.java:23214)
                                         	at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:777)
                                         	at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:783)
                                         	at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:881)
                                         	at android.view.ViewRootImpl.draw(ViewRootImpl.java:5647)
                                         	at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:5330)
                                         	at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:4486)
                                         	at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:3116)
                                         	at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:10885)
                                         	at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1301)
                                         	at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1309)
                                         	at android.view.Choreographer.doCallbacks(Choreographer.java:923)
                                         	at android.view.Choreographer.doFrame(Choreographer.java:852)
                                         	at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1283)
                                         	at android.os.Handler.handleCallback(Handler.java:942)
                                         	at android.os.Handler.dispatchMessage(Handler.java:99)
                                         	at android.os.Looper.loopOnce(Looper.java:226)
                                         	at android.os.Looper.loop(Looper.java:313)
                                         	at android.app.ActivityThread.main(ActivityThread.java:8762)
                                         	at java.lang.reflect.Method.invoke(Native Method)
                                         	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:604)
                                         	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)

How I am loading the image:

val res = asyncPainterResource(
            data = "https://1000logos.net/wp-content/uploads/2020/10/Costa-Coffee-Logo.png",
            filterQuality = FilterQuality.None
        )
KamelImage(
            modifier = Modifier
                .size(64.dp),
            resource = res,
            contentDescription = "Test",
            onLoading = {
                CircularProgressIndicator()
            },
        )

Duplicate of #52