0

指定されたビットマップをトリミングしてスケーリングしようとしていますが、スケーリングのみが機能します。
私は何を間違っていますか?

private Bitmap CropAndShrinkBitmap(Bitmap io_BitmapFromFile, int i_NewWidth, int i_NewHeight) 
{
    int cuttingOffset = 0;
    int currentWidth = i_BitmapFromFile.getWidth();
    int currentHeight = i_BitmapFromFile.getHeight();

    if(currentWidth > currentHeight)
    {
        cuttingOffset = currentWidth - currentHeight;
        Bitmap.createBitmap(i_BitmapFromFile, cuttingOffset/2, 0, currentWidth - cuttingOffset, currentHeight);
    }
    else
    {
        cuttingOffset = i_NewHeight - currentWidth;
        Bitmap.createBitmap(i_BitmapFromFile, 0, cuttingOffset/2, currentWidth, currentHeight - cuttingOffset);
    }
    Bitmap fixedBitmap = Bitmap.createScaledBitmap(i_BitmapFromFile, i_NewWidth, i_NewHeight, false)  ;

    return i_BitmapFromFile;
}

説明によると、「createBitmap は不変のビットマップを返します」。
それはどういう意味ですか?それは私の問題の原因ですか?

4

2 に答える 2

1

ビットマップはデフォルトで「不変」です。つまり、ビットマップを変更することはできません。編集可能な「変更可能な」ビットマップを作成する必要があります。

その方法については、次のリンクを参照してください。

BitmapFactory.decodeResource は、Android 2.2 では変更可能な Bitmap を返し、Android 1.6 では不変の Bitmap を返します。

http://sudarnimalan.blogspot.com/2011/09/android-convert-immutable-bitmap-into.html

于 2012-06-01T20:33:48.817 に答える
1

トリミングはおそらくうまくいきますが、Bitmapトリミングされた結果のオブジェクトがから返さcreateBitmap()、元のオブジェクトは変更されません (前述のように、Bitmapインスタンスは不変であるため)。トリミングされた結果が必要な場合は、戻り値を取得する必要があります。

Bitmap cropped = Bitmap.createBitmap(i_BitmapFromFile, cuttingOffset/2, 0, currentWidth - cuttingOffset, currentHeight);

その後、その結果に対して必要な作業をさらに行うことができます。

HTH

于 2012-06-01T20:42:58.123 に答える