91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何提高Android從文件中讀取圖像的效率

發布時間:2020-11-26 17:14:58 來源:億速云 閱讀:110 作者:Leah 欄目:移動開發

本篇文章給大家分享的是有關如何提高Android從文件中讀取圖像的效率,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

方法一

start_time = System.currentTimeMillis();
      
      BitmapFactory.Options options=new BitmapFactory.Options();
      options.inJustDecodeBounds = true;
      Bitmap bitmap=BitmapFactory.decodeFile(path,options);
      options.inSampleSize=calculateSize(options,width,height);
      options.inJustDecodeBounds=false;
      //整個圖像,下采樣
      bitmap=BitmapFactory.decodeFile(path,options);
      //部分圖像
      Bitmap patch=Bitmap.createBitmap(bitmap, 10, 10, 100, 100);
      
      end_time = System.currentTimeMillis();
      Log.v("BitmapTest", "UI time consume:"+(end_time - start_time));
      imageView.setImageBitmap(bitmap);
      patchView.setImageBitmap(patch);

操作很簡單,先將圖片文件的尺寸等信息讀取出來, 然后根據其尺寸計算其縮放比例,并將圖片中的一部分剪切出來。最后將圖片顯示在ImageView空間上。大致測了幾十次,得到的平均消耗時間為:72.75ms

方法二

啟動子線程

start_time = System.currentTimeMillis();
String path=Environment.getExternalStorageDirectory().getPath()+File.separator+"image1.jpg";
ImgThread imgThread=new ImgThread(msgHandler,path,width,height);
imgThread.start();

子線程中的操作,與1基本相同

BitmapFactory.Options options=new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    Bitmap bitmap=BitmapFactory.decodeFile(path,options);
    options.inSampleSize=calculateSize(options,width,height);
    options.inJustDecodeBounds=false;
    //整個圖像,下采樣
    bitmap=BitmapFactory.decodeFile(path,options);
    //部分圖像
    Bitmap patch=Bitmap.createBitmap(bitmap, 10, 10, 100, 100);
    array=new ArrayList<Bitmap>(2);
    array.add(bitmap);
    array.add(patch);
    //Serializable傳遞
    Bundle bundle=new Bundle();    
    bundle.putSerializable("img", array);
    //Parcelable傳遞
    /*
    MyList l=new MyList(Parcel.obtain());
    l.array=array;
    bundle.putParcelable("img", l);
    */
    Message msg= new Message();
    msg.what=1;
    msg.setData(bundle);
    handler.sendMessage(msg);

將Bitmap傳回到UI線程并呈現

Bundle bundle=msg.getData();
          //Serializable傳遞
          ArrayList<Bitmap> array=(ArrayList<Bitmap>) bundle.getSerializable("img");
          //Parcelable傳遞
          //MyList l=(MyList)bundle.getParcelable("img");
          //ArrayList<Bitmap> array=l.array;//=(ArrayList<Bitmap>) bundle.getParcelable("img");
          Bitmap bitmap=array.get(0);
          Bitmap patch=array.get(1);
          end_time = System.currentTimeMillis();
          Log.v("BitmapTest", "Th time consume:"+(end_time - start_time));
          imageView.setImageBitmap(bitmap);
          patchView.setImageBitmap(patch);

方法二的平均消耗時間為:83.93ms

方法三

該方法需要新建一個類用來實現Parcelable接口

package com.example.bitmaptest;

import java.util.ArrayList;

import android.os.Parcel;
import android.os.Parcelable;

public class MyList implements Parcelable{

  public ArrayList array;
  
  public MyList(Parcel in)
  {
    in.readValue(null);
  }
  
  @Override
  public int describeContents() {
    return 0;
  }

  @Override
  public void writeToParcel(Parcel dest, int flags) {
    dest.writeValue(array);
  }

  public static final Parcelable.Creator<MyList> CREATOR = new Parcelable.Creator<MyList>() {
    @Override
    public MyList createFromParcel(Parcel source) {
      return new MyList(source);
    }
    @Override
    public MyList[] newArray(int size) {
      return new MyList[size];
    }
  };
}

在子線程中的操作

//Parcelable傳遞
    
    MyList l=new MyList(Parcel.obtain());
    l.array=array;
    bundle.putParcelable("img", l);

方法三的平均消耗時間為:87.35ms

結果分析

三種方法都是在魅族MX1型號的手機上測試的,理論上方法三應該比方法二快,但至少根據我的實驗結果來看,在傳送小數據量時(圖像大概是幾mB或幾百kB),數據的傳遞耗時并不是關鍵,兩種方法的耗時差不多。方法一由于沒有使用線程間的數據傳遞,因此耗時是最少的。

因此,我總結得到如下結論:

1、如果必須等到圖像加載完成才允許用戶操作的這種場景,可以直接在UI線程做圖像的操作,這時可以添加一個ProgressDialog用來提示正在加載。

2、如果需要一邊允許用戶操作一邊加載圖像的話,應該新開一個子線程,但是在數據量不大的情況下,Serializable和Parcelable差距不大。

3、總而言之,圖像的尺寸和數量不大時,在UI線程直接做圖像讀取等操作即可,但比較大時還是最好開個子線程。

以上就是如何提高Android從文件中讀取圖像的效率,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

旺苍县| 繁峙县| 邵东县| 略阳县| 小金县| 中超| 时尚| 富锦市| 沂南县| 日照市| 河源市| 靖安县| 平度市| 土默特左旗| 华坪县| 阳江市| 白沙| 泾源县| 盱眙县| 英德市| 石景山区| 奉节县| 顺昌县| 本溪| 铜鼓县| 涞源县| 鱼台县| 邢台市| 永和县| 肇州县| 即墨市| 临湘市| 怀化市| 阿拉善盟| 丁青县| 元江| 隆德县| 岑巩县| 楚雄市| 宿州市| 长宁区|