Android上Web上相同图像的大小不同

时间:2012-08-28 17:23:27

标签: java android drawable

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

我需要从网上购买该图片,而在其他位置,我需要从drawable中选择相同的图片。

问题是我在网络和drawable中有相同的png。当我显示我在drawable中的图像时,它显示的是正确的大小,但是当我从网络上获取它时,它看起来更小。 只是为了说清楚,这只是我的问题的一个例子......我实际上并没有使用相同的图像,它们是不同的图像,但具有相同的大小。为了验证,我已经在网络和drawable上上传了相同的图像,发现相同的图像显示不同的大小。 我需要做些什么来使两者看起来像在可绘制模式?

我已经验证了这一点:

当我获得图像时,我使用以下方式保存在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直接从资源drawable获取图像时要小......

2 个答案:

答案 0 :(得分: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"))

答案 1 :(得分:0)

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