Android:如何:创建现有位图的新副本?

时间:2011-09-08 05:11:25

标签: android

我将创建一个简单的楼层地图指南。我有不同的FLOORS和相应的MAPS。 FLOORS是按钮,MAPS是存储在SD卡中的png文件。当我点击1F时,将显示相应的1Fmap,因此与其他楼层一起显示。

我正在考虑以下事项:

  1. 一个图像视图,用于显示所选地图。
  2. 处理位图的Hashmap(OR)。用于根据所选楼层获取位图。然后通过setImageBitmap(..)
  3. 设置为ImageView
  4. 在单击楼层按钮时下载要在Hashmap中分配的位图。然后创建位图,设置为imageview,然后在点击其他楼层时将其存储到hashmap。
  5. 以下是我的技术/设计问题:

    1. 如何创建位图副本?
    2. 可以逐步将其存储到hashmap中,也可以在每次点击楼层按钮时从sdcard获取它?
    3. 如果我将使用hashmap,可以使用Integer(楼层编号)或String(floornames)作为地图密钥吗?
    4. 更新 另外,我的目标是最多20个楼层(这意味着20个512x512 png文件...我也想将其调整为其他人建议的256x256。)

7 个答案:

答案 0 :(得分:150)

这个答案对我有所帮助:

https://stackoverflow.com/a/17068594/1373248

代码如下:

Bitmap bmp1 = BitmapFactory.decodeResource(cont.getResources(), R.drawable.image);
//then create a copy of bitmap bmp1 into bmp2
Bitmap bmp2 = bmp1.copy(bmp1.getConfig(), true);

答案 1 :(得分:3)

Bitmap OLDBitmap = getBitmap();
Bitmap newBmp = Bitmap.createBitmap(OLDBitmap);

答案 2 :(得分:3)

根据您可以使用的情况:

Bitmap src = ...;
Bitmap dst = src.copy(src.getConfig(), src.isMutable);

下面的代码会创建一个副本。这意味着它从源位图复制像素并创建全新的Bitmap对象。我之所以指出它是因为在互联网上你可以找到许多使用Bitmap.createBitmap()的例子,它不能保证新的位图是一个对象还是对旧的位图的引用。根据情况,您可能会遇到问题行为。

答案 3 :(得分:0)

您将获得位图副本为bitmap2

  

位图bitmap2 = bitmap1.copy(bitmap1.getConfig(),true);

答案 4 :(得分:0)

public static Bitmap cloneBitmap(Bitmap bitmap) {
    return bitmap.copy(bitmap.getConfig(),bitmap.isMutable());
}

答案 5 :(得分:0)

Kotlin扩展名:

fun Bitmap.copy(): Bitmap? = copy(config, isMutable)

答案 6 :(得分:-5)

  1. 要创建位图副本,您可以使用:

    Bitmap newBmp = Bitmap.createScaledBitmap(src, dstWidth, dstHeight, filter);

  2. 您可以逐步从SD卡获取图像。这个实现没问题。

  3. 如果您使用的是Hashmap,则可以将图片网址用作Hashmap的密钥。