zoukankan      html  css  js  c++  java
  • Bitmap通过getWidth和getHeight获取尺寸不符

    在使用BitmapFactory载入图片时,常会出现这样的情况,返回的图片尺寸与实际尺寸不符。这是因为我们把图片资源放到res/drawable文件路径下时,选择的文件不同所致。不同的目录会有不同的缩放。

    1、载入并显示图片

    将70*98的图片放在res/drawable-hdpi中。

    public class MainActivity extends Activity {
    	TextView tv_wl;
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
    		tv_wl=(TextView)findViewById(R.id.tv_wl);
    		Bitmap bm1=BitmapFactory.decodeResource(getResources(), R.drawable.img);
    		int bm_width=bm1.getWidth();
    		int bm_height=bm1.getHeight();
    		tv_wl.setText("width="+bm_width+";    height="+bm_height);
    	}	
    }
    执行结果例如以下图所看到的:

    这里尺寸和原图同样

    2、改动文件存放路径

    (1)放到res/drawable-mdpi下。执行效果如图

    这里尺寸放大了1.5倍

    (2)放到res/drawable-xhdpi下。执行效果如图

    尺寸缩小了1.3倍

    (3)放到res/drawable-xxdpi下,执行效果如图

    尺寸缩小了2倍

    3、寻找原因

    电脑上图片尺寸,单位是像素。Android手机的屏幕分ldpi、mdpi、hdpi,甚至还有xhdpi,对于mdpi(density=160)设备,1dp=1px。对于hdpi(density=240)的设备,1dp=1.5px。所以,把图片放在了res/drawable-mdpi文件夹下。而执行的Android设备屏幕属于hdpi,导致图片尺寸会扩大1.5倍。

    4、解决的方法

    (1)如今的Android设备一般都在hdpi及以上,所以建议把图片资源主要放在hdpi中。

    (2)改动上述代码。设置缩放为false

    BitmapFactory.Options bfoOptions = new BitmapFactory.Options();
    		bfoOptions.inScaled = false; 
    		Bitmap img1 = BitmapFactory.decodeResource(getResources(), R.drawable.img, bfoOptions);
    		int bm_width=img1.getWidth();
    		int bm_height=img1.getHeight();


    执行后你会发现。不论你将图片放在哪里,都是原尺寸。

    參考文档:

    http://www.eoeandroid.com/blog-633294-2751.html

    http://q.cnblogs.com/q/47175/

  • 相关阅读:
    SOA简介
    WebService传XML
    架构设计师与SOA(转)
    第二次自己总结WebService
    SQL SERVER的数据类型
    使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法
    写了一个分页存储过程把总记录数也写到返回表的每行了
    ASP.net新手经常会碰到的问题
    动态添加、删除附件
    七问七答 SOA
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/7076661.html
Copyright © 2011-2022 走看看