无法裁剪位图

时间:2012-06-01 19:03:58

标签: java android

我正在尝试裁剪和缩放给定的位图,但只有缩放才有效 我做错了什么?

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返回一个不可变的位图” 那什么意识?这是我的问题的原因吗?

2 个答案:

答案 0 :(得分:1)

默认情况下,位图“不可变”,这意味着您无法更改它们。您需要创建一个可变的“可变”位图。

查看以下链接:

BitmapFactory.decodeResource returns a mutable Bitmap in Android 2.2 and an immutable Bitmap in Android 1.6

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

答案 1 :(得分:1)

裁剪可能正常,但裁剪后的Bitmap对象从createBitmap() 返回,原始对象未被修改(如上所述,因为Bitmap实例是不可变的)。如果您想要裁剪结果,则必须获取返回值。

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

然后你可以用这个结果做任何进一步的工作。

HTH