首先,我是一个Android编程的新手 :)
我要做的是从我的res/drawable-mdpi目录中加载一个位图,使用以下代码:
BitmapFactory.decodeResource(getResources(), R.drawable.cat_ground_01);
注销后,Bitmap的宽度/高度告诉我一个与实际不同的值。
这在像素完美地放置位图方面有些困难,例如将面部位图与口部位图重叠。
也许我只是缺少这个主题的一些知识:9 希望你能帮忙。
您不能指定它是mdpi、hdpi或其他版本,它将选择与您运行的系统匹配的版本。例如,如果您在mdpi设备上运行,则会解码mdpi版本;在ldpi上运行,则解码ldpi版本。
假设您使用的是hdpi设备,但未定义mdpi资源,它将采用您的mdpi资源,并在解码期间将其变成hdpi(即将mdpi位图放大约1.5倍);同样,如果您的设备具有较低分辨率,则会缩小图像。
你不能只是把资源放到nodpi文件夹里吗?
也就是说,将其放在res/drawable-nodpi目录下。
这是我过去的做法。
当我注销后,位图的宽度/高度告诉我一个其他的值而不是实际的位图大小。
检查从/drawable加载位图后的options.inTargetDensity和options.inDensity。 它们不相等(例如160和240)。如果options.inScaled设置为true(默认值)-那么位图会自动重新缩放。
另一种方法是在加载后使用Bitmap.createScaledBitmap来重新调整图像大小。因为有时您需要inScaled = true。
//Target dimensions
int iW = 300;
int iH = 200;
Bitmap mOriginalBitmap = new Bitmap;
BitmapFactory.Options options = new BitmapFactory.Options();
//Load image from resource
mOriginalBitmap = BitmapFactory.decodeResource(getResources(),
R.drawable.sample_image_900px, options);
//Scale to target size
mOriginalBitmap = Bitmap.createScaledBitmap(mOriginalBitmap, iW, iH, true);