最近在写IM软件 碰到一个问题 , 就是获取一张drawable 在res drawable目录下的 图片 和 在 sdcard 中获取的图片大小 总是不一样
drawable中 图片密度为 本机密度 而 sdcard中获取到的drawable 为默认的160 太伤不起了,而且在sdcard目录下 得到 的bitmap是不改变的 找了很多方法 又看了N多源码
终于解决了
想在sdcard目录中的图片与drawable的图片大小一致 可以这样做:
1、得到资源目录下的drawable
BitmapDrawable drawable = (BitmapDrawable) getResources().getDrawable(R.drawable.test);
2、得到这个drawable的宽高
int w = drawable.getIntrinsicWidth();
int h = drawable.getIntrinsicHeight();
3、得到sdcard下目录的bitmap
Bitmap bitmap = Bitmap.createScaledBitmap(BitmapFactory.decodeFile(testUrl), w, h, true);
// Bitmap.createScaledBitmap(Bitmap src, int dstWidth, int dstHeight, boolean filter) 这个方法就是核心方法 设置createScaledBitmap filter 为true 即可变位图
4、将bitmap转换成drawable
BitmapDrawable drawable =new BitmapDrawable(getResources() , bitmap);
5、将drawable的密度设置为本机密度 即:
drawable.setTargetDensity(getResources().getDisplayMetrics());
到此:大功告成 。
两张图片的的大小就一致了!
------------ author by wsc