web-dev-qa-db-ja.com

ビットマップが大きすぎてテクスチャにアップロードできません

ドローアブルディレクトリに960x1440サイズの画像ファイルがあります。アプリの起動時に、画像が背景として読み込まれず、logcatに次のように表示されます。

ビットマップが大きすぎてテクスチャにアップロードできません(2880x4320、max = 4096x4096)

画像が960x1440の場合、なぜ2880x4320と表示されるのですか?

ビットマップはxmlを介してロードされます:

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"

    Android:layout_centerHorizontal="true" 
    Android:layout_centerVertical="true"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:background="@drawable/launcher_bg"
    Android:orientation="vertical"
    Android:paddingBottom="@dimen/activity_vertical_margin"
    Android:paddingLeft="@dimen/activity_horizontal_margin"
    Android:paddingRight="@dimen/activity_horizontal_margin"
    Android:paddingTop="@dimen/activity_vertical_margin">
11
andreasperelli

指定のない/drawable/フォルダー内の画像は、「デフォルト」と見なされます。つまり、1dp = 1pxの場合はmpdiであり、実際に実行しているデバイスはxxhdpiその画像は実行時にスケールアップされます。

元の画像は960x1440である可能性がありますが、mdpiからxxhdpiへの変換はサイズの3倍であるため、960x1440は(3 * 960)x(3 * 1440)= 2880x4320になります。テクスチャが大きすぎて、ハードウェアアクセラレーションビューに適用できません。

したがって、実際には非常に簡単に修正するには、2つの選択肢があります。

  1. 画像を/drawable-nodpi/に移動します。これは簡単で、.apkサイズを小さくしますが、ローエンドデバイスはそのような大きな画像を読み込むのに苦労する可能性があります。
  2. すべての密度mdpihdpixhdpixxhdpiでスケーリングされた画像を作成して、実行時のオーバースケーリングを回避し、古いデバイスでより小さな画像を作成します。
48
Budius