0

ユーザーがギャラリーから画像を読み込んでさらに描画できるように、描画アプリを作成しています。ただし、写真のサイズが画面よりも大きい場合は、写真の一部しか表示できません。

   public void load_pic(String picturePath) // load a picture from gallery
   {
      bitmap = (BitmapFactory.decodeFile(picturePath)).copy(Bitmap.Config.ARGB_8888, true);
      bitmapCanvas = new Canvas(bitmap);
      invalidate();
   }

画像が次のいずれかになるようにコーディングするにはどうすればよいですか

  1. 画面の最大許容幅または高さのいずれかに収まるようにロードする、または
  2. 画像をプルして全画面を占有できるようにロードする

また、一部のデバイスで実行すると、java.lang.OutOfMemoryError...そしてクラッシュしました...どうすれば対処できますか?

よろしくお願いします!

4

1 に答える 1

0

まず、以下のコードを使用して達成できる画面の幅と高さを見つける必要があります。

Display display = getWindowManager().getDefaultDisplay();
int newWidth = display.getWidth();
int newHeight = display.getHeight();

活動していない場合は、以下のように表示されます。

WindowManager wm = (WindowManager) mContex.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();

以下のコードを使用して、ビットマップをスケーリングできます。

Bitmap scaled = Bitmap.createScaledBitmap(oldBitmap, newWidth, newHeight, true);

BitmapFactory.Options のoutWidthおよび outHeight 属性を使用して、デコード時の高さと幅を設定することもでき ます。

そして、それを克服するために、コメントで指摘された答えoutOfMemoryErrorを参照できます。

PSリンクされた回答を書きました。

これがあなたを助けることを願っています。

于 2013-02-02T09:03:31.010 に答える