我有一个32x32的图像,已将其放在drawable文件夹中,并且从服务器下载了相同的图像应用程序。但是下载的图片看起来更大(更像48x48)并且像素化。
服务器代码(C#)
MemoryStream tms = new MemoryStream();
image.Save(tms, System.Drawing.Imaging.ImageFormat.Png);
byte[] imageData = tms.ToArray();
//send data to phone
应用程式码(Java)
ByteArrayInputStream memStream = new ByteArrayInputStream(imageData);
Drawable image = Drawable.createFromStream(memStream, ""); //big image and pixelated
memStream.close();
但是,如果我从Resource加载相同的文件,则文件总是较小
Drawable image = getResources().getDrawable(R.drawable.image);
ImageView XML
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:focusable="false"
android:scaleType="center" />
编辑:
最后,设置BitmapDrawable的TargetDensity起作用了!
Bitmap bmp = BitmapFactory.decodeByteArray(imageData, 0,
imageData.length);
BitmapDrawable image = new BitmapDrawable(bmp);
image.setTargetDensity(bmp.getDensity());
最佳答案
根据设备的像素密度来重新缩放图像,如果需要Drawable对象,请尝试使用BitmapFactory.decodeStream(...)
并使用new BitmapDrawable(Bitmap)
对其进行包装。