2

我有一个像 test.png 这样的图像。

我需要从网上购买该图像,并且在另一个位置我需要从可绘制对象中选择相同的图像。

问题是我在网络上和drawable中有相同的png。当我在可绘制对象中显示我拥有的图像时,它会以正确的大小显示,但是当我从网络上获取它时,它会显得更小。为了清楚起见,这只是我的问题的一个例子......我实际上并没有使用相同的图像,它们是不同的图像但具有相同的大小。为了验证,我在网络和可绘制对象上上传了同一张图片,发现同一张图片以不同的尺寸出现。我需要做什么才能使两者都出现在可绘制模式下?

我已经验证了这一点:

当我使用以下方法获得保存在 SD 卡中的图像时:

File sdCard = Environment.getExternalStorageDirectory();
Fle directory = new File(sdCard.getAbsolutePath());
File file = new File(directory, "teste.png");
File InputStream streamIn;
Bitmap bitmap = Bitmapfactory.decodeStream(streamin);
ImageView image = new ImageView(c);
image.setImageBitmap(bitmap);

图像看起来比这种方式更大:

Drawable img = Drawable.createFromPath(new File(Environment.getExternalStorageDirectory(), "teste.png").getAbsolutePath());
ImageView image = new ImageView(c);
image.setImageDrawable(img);

但在第一种模式下,它看起来比我使用 getResouces.getDrawable 直接从可绘制资源中获取图像时要小...

4

2 回答 2

2

我写了这段代码来重现错误:

LinearLayout ll = (LinearLayout) findViewById(R.id.root);

try {
    ImageView image = new ImageView(this);
    Bitmap bitmap = BitmapFactory.decodeStream(getAssets().open("tag-logo-android.png"));
    image.setImageBitmap(bitmap);
    ll.addView(image);

    image = new ImageView(this);
    Drawable drawable = Drawable.createFromStream(new URL("http://cdn.sstatic.net/stackoverflow/img/tag-logo-android.png").openStream(), null);
    image.setImageDrawable(drawable);
    ll.addView(image);
} catch (MalformedURLException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

问题不在于图像的来源。问题是Drawable忽略了屏幕密度。此代码有效:

LinearLayout ll = (LinearLayout) findViewById(R.id.root);

try {
    ImageView image = new ImageView(this);
    Bitmap bitmap = BitmapFactory.decodeStream(getAssets().open("tag-logo-android.png"));
    image.setImageBitmap(bitmap);
    ll.addView(image);

    image = new ImageView(this);
    bitmap = BitmapFactory.decodeStream(new URL("http://cdn.sstatic.net/stackoverflow/img/tag-logo-android.png").openStream());
    image.setImageBitmap(bitmap);
    ll.addView(image);
} catch (MalformedURLException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

在您的情况下,您可以使用:

bitmap = BitmapFactory.decodeFile(new File(Environment.getExternalStorageDirectory(), "test.png"))
于 2012-08-28T20:06:17.943 回答
0

也许您需要使用 Bitmap 对象而不是 Drawable 来解决您的问题。

于 2012-08-28T19:02:54.553 回答