1. ホーム
  2. android

[解決済み] Bitmap.createBitmap(Bitmap source, int x, int y, int width, int height) return wrong bitmap

2022-02-26 21:32:34

質問

ビットマップイメージをトリミングする必要があります。このために、私は

Bitmap bitmap = Bitmap.createBitmap(imgView.getWidth(),imgView.getHeight(), Bitmap.Config.RGB_565);
Bitmap result =Bitmap.createBitmap(bitmap,imgView.getLeft()+10, imgView.getTop()+50, imgView.getWidth()-20, imgView.getHeight()-100);
bitmap.recycle();
Canvas canvas = new Canvas(result);
imgView.draw(canvas);

しかし、それはビットマップの下と右をカットします。ビットマップの上と左の部分は出力に存在します。つまり、xとyの位置は関係ないのです。

私は良いドキュメントを検索しています。しかし、私はできませんでした。

ありがとうございました。

この問題は何ですか、そしてどのように解決しますか?

どのように解決するのか?

基本的にこの問題は、ビットマップを作成することから発生します。その中には何も入れません。次に、より小さなビットマップを作成し、その小さなビットマップにimageViewをレンダリングします。

これは、下100ピクセルと右20ピクセルをカットしています。

大きなビットマップを作成する必要があります。 そのビットマップにイメージビューデータを追加します。 そして、サイズを変更します。

次のようなコードで動作するはずです。

Bitmap bitmap = Bitmap.createBitmap(imgView.getWidth(),imgView.getHeight(), Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
imgView.draw(canvas);
Bitmap result =Bitmap.createBitmap(bitmap,imgView.getLeft()+10, imgView.getTop()+50, imgView.getWidth()-20, imgView.getHeight()-100);
bitmap.recycle();