1

ええと、このすべてが何週間も私を苦しめます。いつでもwrap_contentにしたい場合でも、高さ227ピクセルの画像を170ピクセルに設定します。

Ok。ここでは、長さ 1950 ピクセルの My Image を使用します (どのように見えるかを理解できるように、その一部をここに示します)。

ここに画像の説明を入力

まず、高さを 227 ピクセルに戻したいと思います。

Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(),R.drawable.ver_bottom_panel_tiled_long);
            int width = bitmapOrg.getWidth();
        int height = bitmapOrg.getHeight();
        int newWidth = 200; //this should be parent's whdth later
        int newHeight = 227;

        // calculate the scale
        float scaleWidth = ((float) newWidth) / width;
        float scaleHeight = ((float) newHeight) / height;

        // create a matrix for the manipulation
        Matrix matrix = new Matrix();
        // resize the bit map
        matrix.postScale(scaleWidth, scaleHeight);

        // recreate the new Bitmap
        Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOrg, 0, 0, 
                          width, height, matrix, true); 


        BitmapDrawable dmpDrwbl=new BitmapDrawable(resizedBitmap);

    verbottompanelprayer.setBackgroundDrawable(dmpDrwbl);

つまり... これはトリミングされた画像ではありません。いいえ、1950 ピクセルを 200 ピクセルに圧縮したものです。 ここに画像の説明を入力

しかし、この200ピクセルまたは設定する幅以外のものを切り取って、この長い画像全体を200ピクセル領域に押し込まないでください。

また、 BitmapDrawable(Bitmap bitmap); および imageView.setBackgroundDrawable(drawable); 非推奨です - どうすれば変更できますか?

4

1 に答える 1

5

私が見たところによると、あなたは新しいサイズ (200x227) のビットマップを作成しているので、あなたが何を期待していたのかわかりません。あなたはコメントにあなたが拡大縮小することさえ書いていて、トリミングについての言葉はありません...

あなたができることは次のとおりです。

  1. API が少なくとも 10 (gingerbread) の場合、decodeRegion を使用して BitmapRegionDecoder使用できます。

  2. API が古すぎる場合は、大きなビットマップをデコードしてから、Bitmap.createBitmapを使用して新しいビットマップに切り取る必要があります。

このようなもの:

final Rect rect =...
if (VERSION.SDK_INT >= VERSION_CODES.GINGERBREAD_MR1)
  {
  BitmapRegionDecoder decoder=BitmapRegionDecoder.newInstance(imageFilePath, true);
  croppedBitmap= decoder.decodeRegion(rect, null);
  decoder.recycle();
  }
else 
  {
  Bitmap bitmapOriginal=BitmapFactory.decodeFile(imageFilePath, null);
  croppedBitmap=Bitmap.createBitmap(bitmapOriginal,rect.left,rect.top,rect.width(),rect.height());
  }
于 2013-08-19T12:22:58.607 に答える