我有一个像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获取图像时要小......
答案 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来解决您的问题。