繁体   English   中英

Java Android位图参考

[英]Java Android Bitmap references

我正在用Java创建这个Android项目。 但是,我想知道带有某些Bitmap方法的引用将走多远。

我有一个原始的位图,就像:

Bitmap originalBitmap = BitmapFactory.decodeResource(resources, bitmapID);

然后将其发送到基本类的构造函数中的对象:

class Test
{
    Bitmap memberBitmap;

    Test(Bitmap b)
    {
        memberBitmap = b;
    }
}

到目前为止,我知道memberBitmap仍然是对originalBitmap的引用。 但是我想做的基本上是使用以下方法调整此位图的大小:

memberBitmap = Bitmap.createScaledBitmap(memberBitmap, newWidth, newHeight, filter);

我现在是否已将新的位图存储到内存中或更改了originalBitmap?

如果是这样,那么我创建了一个新的位图,是否需要进行任何更改以使其更新originalBitmap?

喜欢:

memberBitmap.createScaledBitmap(memberBitmap, newWidth, newHeight, filter);

借助该API的声音,它可能正在内存中创建一个新的位图。 您可以通过在构造函数运行后在两个对象上打印出toString()并检查它们的内存位置是否相同来进行检查。

对于第二个问题:将originalBitmap更改为对新Bitmap引用。

它实际上是在创建一个新的位图。 在这种情况下,它将创建一个新的位图,并且您将丢失对旧位图的引用。 如果您这样做的代码如下:

memberBitmap = b;
Bitmap scaledBitmap = Bitmap.createScaledBitmap(memberBitmap, newWidth, newHeight, filter);

您会看到memberBitmap保持不变,而scaledBitmap是更大或更小的版本。 但是,一个例外是,如果根本不需要进行任何缩放,在这种情况下,它只返回对memberBitmap的引用,而您将有两个对同一对象的引用。

删除工作的一种方法是首先使用BitmapFactory.Options参数创建较小的Bitmap。 例如:

BitmapFactory.Options o = new BitmapFactory.Options();
o.inSampleSize = 2;
Bitmap originalBitmap = BitmapFactory.decodeResource(resources, bitmapID);

这将创建一个位图,其大小为原始图像的一半(宽度和高度)。 不幸的是,这是非常有限的,并且inSampleSize的值必须为2的幂。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM