2012-02-20 10 views
2

私は、既存のビットマップを取り出し、その中央を削除して「切り取った」バージョンを作成することで、アンドロイドで画像を動的に作成しようとしています。結果として得られる画像の高さは当然のことながら、添付の例のようにオリジナルよりも小さくなります。ビットマップの中央領域を切り出してAndroidで縮小する

私はオリジナルから2つの新しいビットマップを作成します.1つは、クロップセクションの上に画像の上部を含むもの(例ではアンドロイドの頭部)と残りの画像Bitmap.createBitmap(source, x, y, width, height)メソッドを使用してクロップセクション(アンドロイドの足)の下に、これらのビットマップの両方を、元のイメージから削除されたスペースを引いたサイズのキャンバスに描画します。

これはちょっと大変だと思います。このメソッドを何回か呼び出すことができるように、毎回2つのビットマップを作成するのは無駄です。

これを行うより効率的な方法があるのだろうかと思っていました。元のビットマップをキャンバスに描きたいのですが、パスを使ってペイントのxfermodeを new PorterDuffXfermode(Mode.DST_OUT)に設定して、削除したい部分の画像を切り取ってください。しかし、これはその領域を明らかにし、画像を縮小しない、つまりAndroidの真ん中に大きな空白を残すように見える。

大変ありがとうございます。

Example of cutting out centre of bitmap

答えて

1

なぜあなたは、2つのビットマップを作成するのですか? 1つのビットマップを作成してからcanvas.drawBitmap()を2回実行するだけです。完了

Bitmap bmpOriginal; 
Bitmap bmpDerived = Bitmap.create(...); 
Canvas canvas = new Canvas(bmpDerived); 
canvas.drawBitmap(bmpOriginal, rectTopSrc, rectTopDst, null); 
canvas.drawBitmap(bmpOriginal, rectBottomSrc, rectBottomDst, null); 

+0

1つのビットマップを作成するだけで、画像の中央を削除するにはどうすればよいですか? 答えをコードで説明できますか? – luuts

+0

要求ごとにコードが追加されました。 –

+0

ああ、それほど大したことは考えていませんでした。乾杯! – luuts

関連する問題