我有一个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)对其进行包装。

10-07 15:17