图像的长度和宽度是两倍,为什么?

问题描述

我有这个代码

BitmapDrawable bd = (BitmapDrawable)this.GetDrawable(Resource.Drawable.add1);
int height = bd.Bitmap.Height;
int width = bd.Bitmap.Width;
Toast.MakeText(this,width.ToString() + "  " + height.ToString(),ToastLength.Long).Show();

add1.png的宽高是55*55像素,但是Toast显示的是110*110像素,为什么?

解决方法

此问题是由设备分辨率引起的。 bitmap.Width 返回的值会根据不同的dpi进行调整,不同机型这个dpi可能不同。如果设备具有更高的分辨率,则此处可能会打印更高的数字。

要得到图片文件的原始大小,需要将大小除以dpi值。

var density = Resources.DisplayMetrics.Density;

BitmapDrawable bd = (BitmapDrawable)this.GetDrawable(Resource.Drawable.test);
var the_original_height = bd.Bitmap.Height / density;
var the_orignial_width = bd.Bitmap.Width / density;

Toast.MakeText(this,the_original_height.ToString() + "*" + the_original_height.ToString(),ToastLength.Long).Show();