亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

解決Bitmap通過getWidth和getHeight獲取尺寸不符的問題

 更新時間:2020年08月28日 09:22:20   作者:蕭逸凡  
這篇文章主要介紹了解決Bitmap通過getWidth和getHeight獲取尺寸不符的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

在使用BitmapFactory加載圖片時,常會出現(xiàn)這種情況,返回的圖片尺寸與實際尺寸不符。這是由于我們把圖片資源放到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);
 } 
}

運行結(jié)果如下圖所示:

這里尺寸和原圖相同

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)設(shè)備,1dp=1px,對于hdpi(density=240)的設(shè)備,1dp=1.5px。所以,把圖片放在了res/drawable-mdpi目錄下,而運行的Android設(shè)備屏幕屬于hdpi,導(dǎo)致圖片尺寸會擴大1.5倍。

4、解決辦法

(1)現(xiàn)在的Android設(shè)備一般都在hdpi及以上,所以建議把圖片資源主要放在hdpi中。

(2)修改上述代碼,設(shè)置縮放為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();

運行后你會發(fā)現(xiàn),不論你將圖片放在哪里,都是原尺寸。

補充知識:Android 獲取drawable中圖片的高度寬度

1.定義一個ImageData類如下:

package com.example.vidarecyclerviewstagger;
public class ImageData {
  private int resourceId;
  private int height;
  private int width;

  public ImageData(int resourceId,int height,int width){
    this.resourceId = resourceId;
    this.height = height;
    this.width = width;
  }

  public int getResourceId() {
    return resourceId;
  }

  public void setResourceId(int resourceId) {
    this.resourceId = resourceId;
  }

  public int getHeight() {
    return height;
  }

  public void setHeight(int height) {
    this.height = height;
  }

  public int getWidth() {
    return width;
  }

  public void setWidth(int width) {
    this.width = width;
  }
}

2.在drawable中放置一些圖片:

private static int[] imgRes = new int[]{R.drawable.img1,R.drawable.img2,R.drawable.img3,R.drawable.img4,
    R.drawable.img5,R.drawable.img6,R.drawable.img7,R.drawable.img8,
    R.drawable.img9,R.drawable.img10,R.drawable.img11,R.drawable.img12,
    R.drawable.img13,R.drawable.img14,R.drawable.img15,R.drawable.img16};

3.獲取每個圖片的高度寬度并保存數(shù)據(jù)到mData中:

private ArrayList<ImageData> mData = new ArrayList<>();

public void InitData(){
  for(int i = 0;i < imgRes.length;i++){
    BitmapFactory.Options options = new BitmapFactory.Options();
    BitmapFactory.decodeResource(getResources(),imgRes[i],options);

    //獲取圖片的寬高
    int height = options.outHeight;
    int width = options.outWidth;

    Log.i("YYYY","圖片的寬度:"+width+"圖片的高度:"+height);
    ImageData imgData = new ImageData(imgRes[i],height,width);
    mData.add(imgData);
  }
}

關(guān)鍵代碼就這么幾句:

BitmapFactory.Options options = new BitmapFactory.Options();
BitmapFactory.decodeResource(getResources(),imgRes[i],options);

//獲取圖片的寬高
int height = options.outHeight;
int width = options.outWidth;

以上這篇解決Bitmap通過getWidth和getHeight獲取尺寸不符的問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Flutter如何完成路由攔截,實現(xiàn)權(quán)限管理

    Flutter如何完成路由攔截,實現(xiàn)權(quán)限管理

    本篇介紹了利用 Fluro 路由管理實現(xiàn)路由權(quán)限攔截的兩種方式,兩種方式各有好處,使用過程中可以根據(jù)實際情況決定使用哪一種方法。
    2021-06-06
  • 一分鐘快速定位Android啟動耗時問題

    一分鐘快速定位Android啟動耗時問題

    做開發(fā)除了實現(xiàn)功能,還要注重優(yōu)化,性能優(yōu)化包括的東西還是非常多的,下面這篇文章主要給大家介紹了關(guān)于如何通過一分鐘快速定位Android啟動耗時問題的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • Kotlin ViewModelProvider.Factory的使用實例詳解

    Kotlin ViewModelProvider.Factory的使用實例詳解

    這篇文章主要介紹了Kotlin ViewModelProvider.Factory的使用,在我們使用 ViewModel 的時候,我們會發(fā)現(xiàn),有的時候我們需要用到 ViewModelFactory,有的時候不需要
    2023-02-02
  • Android自定義酒店日期選擇器

    Android自定義酒店日期選擇器

    這篇文章主要為大家詳細介紹了Android自定義酒店日期選擇器、旅游日期區(qū)間選擇器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Android四大組件:Activity/Service/Broadcast/ContentProvider作用示例

    Android四大組件:Activity/Service/Broadcast/ContentProvider作用示例

    Android是一種基于Linux,自由及開放源代碼的操作系統(tǒng),Android分為四個層,從高層到底層分別是應(yīng)用程序?qū)印?yīng)用程序框架層、系統(tǒng)運行庫層和Linux內(nèi)核層,Android有四大基本組件:Activity、Service服務(wù)、BroadcastReceiver廣播接收器、Content Provider內(nèi)容提供者
    2023-11-11
  • Android自定義方框EditText注冊驗證碼

    Android自定義方框EditText注冊驗證碼

    這篇文章主要為大家詳細介紹了Android自定義方框EditText注冊驗證碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Android webView如何輸出自定義網(wǎng)頁

    Android webView如何輸出自定義網(wǎng)頁

    這篇文章主要介紹了Android webView如何輸出自定義網(wǎng)頁,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • Android自定義控件橫向柱狀統(tǒng)計圖

    Android自定義控件橫向柱狀統(tǒng)計圖

    這篇文章主要為大家詳細介紹了Android自定義控件橫向柱狀統(tǒng)計圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • Android畢業(yè)設(shè)計備忘錄APP

    Android畢業(yè)設(shè)計備忘錄APP

    這篇文章主要介紹了一個Android畢業(yè)設(shè)計備忘錄APP,它很小,但是功能很全,可實現(xiàn)添加、刪除、修改、查看的功能,使用Java語言開發(fā),風(fēng)格簡練
    2021-08-08
  • Android使用jni調(diào)用c++/c方法詳解

    Android使用jni調(diào)用c++/c方法詳解

    這篇文章主要介紹了Android使用jni調(diào)用c++/c方法詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07

最新評論