development

Android Studio Canvas : 너무 큰 비트 맵 그리기

big-blog 2021. 1. 9. 11:28
반응형

Android Studio Canvas : 너무 큰 비트 맵 그리기


Ubuntu 16.04를 실행하고 있습니다. Android Studio에서 에뮬레이터에서 애플리케이션을 실행하려고하면 다음 오류가 발생합니다.

치명적 예외 : 주요 프로세스 : 여기에 프로젝트 이름, PID : 2528 java.lang.RuntimeException : 캔버스 : 너무 큰 (216090000bytes) 비트 맵을 그리려고합니다. android.view.DisplayListCanvas.throwIfCannotDraw (DisplayListCanvas.java:260) at android.graphics.Canvas.drawBitmap (Canvas.java:1415) at android.graphics.drawable.BitmapDrawable.draw (BitmapDrawable.java:528) at android. widget.ImageView.onDraw (ImageView.java:1316) at android.view.View.draw (View.java:17185) at android.view.View.updateDisplayListIfDirty (View.java:16167) at android.view.View.draw (View.java:16951) at android.view.ViewGroup.drawChild (ViewGroup.java:3727) at android.view.ViewGroup.dispatchDraw (ViewGroup.java:3513) at android.view.View.updateDisplayListIfDirty (View.java : 16162) at android.view.View.draw (View.java:16951) at android.view.ViewGroup.drawChild (ViewGroup.java:3727) at android.view.ViewGroup.dispatchDraw (ViewGroup.java:3513) at
기타...

에뮬레이터를 작동시키기 위해 몇 가지 후프를 거쳐야했지만 AMD에서 에뮬레이터를 실행할 수 있도록 심볼릭 링크를 만들어야했습니다. 이것이 문제의 일부인지 확실하지 않습니다. 그리고 제 삶을 위해 왜이 일을 계속하는지 알 수 없습니다. 내 그룹에는 동일한 에뮬레이트 된 전화 및 SDK에서 프로젝트를 잘 에뮬레이트하는 다른 사람들이 있습니다.


(고해상도) 드로어 블 의 이미지 drawable-xxhdpi로 이동 합니다. 그러나 앱 개발에서는 큰 이미지를 사용할 필요가 없습니다. APK 파일 크기가 증가합니다.


나는 같은 문제가 있었다. 일부 저해상도 장치에서 너무 큰 이미지를 업로드하려고하면 앱이 축소됩니다. 크기가 다른 여러 이미지 (hdpi, xxdpi 등)를 만들거나 단순히 외부 라이브러리를 사용하여 문제를 빠르고 효율적으로 해결하는 이미지를로드 할 수 있습니다. 저는 Glide 라이브러리를 사용했습니다 (Picasso와 같은 다른 라이브러리를 사용할 수 있음).

    panel_IMG_back = (ImageView) findViewById(R.id.panel_IMG_back);
    Glide
            .with(this)
            .load(MyViewUtils.getImage(R.drawable.wallpaper)
            .into(panel_IMG_back);

문제는 당시 앱에서 사용했던 메인 이미지였습니다. 이미지의 실제 크기가 너무 커서 압축했습니다. 그런 다음 매력처럼 작동하고 품질 손실이 없었으며 앱이 에뮬레이터에서 제대로 실행되었습니다.


제 경우에는 안드로이드 플랫폼을 제거하고 다시 추가해야했습니다. 무언가가 막혀서 내 모든 코드를 다른 앱에 복사하는 것이 매력처럼 작동했습니다. 따라서 플랫폼을 제거하여 Android 용 빌드를 정리하는 것이 좋습니다.

cordova platform remove android
cordova platform add android

나는 때때로 당신이해야 할 일종의 정리라고 생각합니다 :-(


이 오류는 다른 사람들이 드로어 블 디렉토리에있는 큰 이미지 (1800px X 900px)라고 말한 것처럼 포토샵을 사용하여 이미지를 편집하고 비례 적으로 크기를 줄였고 작동했습니다 ... !!


이것은 Glide에서 문제가 될 수 있습니다. 많은 이미지를로드하려고 할 때 이것을 사용하고 그중 일부는 매우 큽니다.

Glide.load("your image path")
                       .transform(
                               new MultiTransformation<>(
                                       new CenterCrop(),
                                       new RoundedCorners(
                                               holder.imgCompanyLogo.getResources()
                                                       .getDimensionPixelSize(R.dimen._2sdp)
                                       )
                               )
                       )
                       .error(R.drawable.ic_nfs_default)
                       .into(holder.imgCompanyLogo);
           }

Picasso를 사용하면 Glide로 변경됩니다.

피카소 제거

Picasso.get().load(Uri.parse("url")).into(imageView)

글라이드 변경

Glide.with(context).load("url").into(imageView)

Picasso가 큰 비트 맵으로 그리는 것보다 더 효율적인 글라이드

참조 URL : https://stackoverflow.com/questions/40835514/android-studio-canvas-drawing-too-large-bitmap

반응형