BitmapFactory.decodeResource或decodeStream用于不同的图像

时间:2013-09-01 21:30:14

标签: java android android-sqlite

我有一个长期存在的图像问题(用于地图引脚)我正在使用它随着分辨率越来越高而不断恶化。如果我使用一个图像,可以将它放在可绘制的目录中并指定该图像。找到不同大小和分辨率的作品。但是,我正在动态地从数据库中提取图像名称。因此,将图像放在资源目录中工作正常,但它是所有分辨率的唯一一个图像。现在不太好,因为它们现在在高端手机上太小了。

所以我的目标是从数据库中获取图像名称,然后能够使用可绘制目录并具有不同的大小。似乎这是可能的,但我尝试的一切都失败了。

这可以从资源目录中指定一个图像:

public void run(){
    if (!(llat == 0) && !(llon == 0)) {
        if (ests == null || ests.size() == 0
            || poisPinpoints.size() == 0) {
        ests = DBManager.getEstablishments();
        for (Establishment est : ests) {
        try {
        est_pin_bmp = BitmapFactory.decodeResource(getResources(),R.drawable.mil_pushpin);
  poisPinpoints.put(
        est.getPoiType().getPushpin(), est_pin_bmp);
    } catch (Exception e) {
        e.printStackTrace();
            }
        }
    }

当我从数据库中提取多个图像时使用此代码...但它只是资产目录中的一个尺寸:

public void run(){
if (!(llat == 0) && !(llon == 0)) {
    if (ests == null || ests.size() == 0
        || poisPinpoints.size() == 0) {
    ests = DBManager.getEstablishments();
    for (Establishment est : ests) {
        try {
    Bitmap bm = BitmapFactory
        .decodeStream(PlayPlaces.this
            .getAssets().open(
                est.getPoiType()
                    .getPushpin()));
    poisPinpoints.put(
        est.getPoiType().getPushpin(), bm);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
}

1 个答案:

答案 0 :(得分:0)

你可能想看看这个方法Resources.getIdentifier()

用它可以指定类似的东西:

String resName = est.getPoiType().getPushpin();
int drawId = getResources().getIdentifier(resName , "drawable", getPackageName());
est_pin_bmp = BitmapFactory.decodeResource(getResources(), drawId);