ビットマップを特定のxとyオフセットで "シフト"したいと思います。シフトすると、300x500のビットマップがあり、-50オフセットでシフトすると、ビットマップの下部に沿って、すべてのピクセルが50ピクセル上に移動し、300x50ピクセルの四角形が空白になることが予想されます。 shiftXとshiftYが負の場合は下のコードが有効ですが、正の値ではうまくいきません。なぜ私は考えていない?Android:ビットマップをシフトする方法は?
Rect srcRect = new Rect(-shiftX, -shiftY, mBitmap.getWidth(), mBitmap.getHeight());
Rect destRect = new Rect(srcRect);
destRect.offset(shiftX, shiftY);
Canvas bitmapCanvas = new Canvas(mBitmap);
bitmapCanvas.drawBitmap(mBitmap, srcRect, destRect, null);
私はこれの多くの異なるバージョンを試しました。ビットマップを正のyで変換しようとすると、常にゴミが生成されるようです。この簡単な例では、負のシフトYは予想される動作を示しますが、正のシフトYはガベージ結果を示します。
Canvas bitmapCanvas = new Canvas(mBitmap);
bitmapCanvas.drawBitmap(mBitmap, 0, shiftY, null);
*アップデート。これは以下のコードで解決されます。しかし、これはメモリ効率的ではありません。より良い解決策の提案はありますか?
Canvas bitmapCanvas = new Canvas(mBitmap);
Bitmap tempBitmap = mBitmap.copy(CONFIG.ARGB_8888, false);
bitmapCanvas.drawBitmap(tempBitmap, 0, shiftY, null);
は 'work'は正確に何を意味していないのですか?何を手に入れますか? – WarrenFaith
は一見ゴミの結果をもたらします – ab11
なぜ新しいキャンバスを作成しますか? – WarrenFaith