利用MediaStore檢索圖像+利用ExitInterface修改EXIF信息

      網友投稿 745 2022-05-30

      利用MediaStore檢索圖像

      由于ContentProvider(當前為MediaStore)在應用程序之間是共享的,且大多數應用程序默認使用MediaStore,因此可以利用它來建立自己的圖像庫應用程序。

      MediaStore和所有的內容提供器都以一種類似數據庫的方式運作。從它們中選擇記錄,獲得一個Cursor對象,并通過它來遍歷結果。

      1.首先創建一個打算返回列的字符串數組。對于MediaStore中的圖像,其標準列在MediaStore.Images.Media類表示。

      String[] columns={Media.DATA,Media._ID,Media.TITLE,Media.DISPLAY_NAME};

      long oneHourAgo=System.currentTimeMillis()/1000-(60*60);

      String[] whereValues={""+oneHourAgo};

      cursor=managedQuery(Media.EXTERNAL_CONTENT_URI,columns,Media.DATE_ADDED+" > ?",whereValues,Media.DATE_ADDED+" ASC");

      displayColumn=cursor.getColumnIndexOrThrow(Media.DISPLAY_NAME);

      public class MediaStoreGallery extends Activity

      {

      public final static int DISPLAYWIDTH=200;

      public final static int DISPLAYHEIGHT=200;

      TextView titleTextView;

      ImageButton imageButton;

      Cursor cursor;

      Bitmap bmp;

      String imageFilePath;

      int fileColumn;

      int titleColumn;

      int displayColumn;

      @Override

      protected void onCreate(Bundle savedInstanceState)

      {

      // TODO Auto-generated method stub

      super.onCreate(savedInstanceState);

      setContentView(R.layout.main);

      titleTextView=(TextView)this.findViewById(R.id.TitleTextView);

      imageButton=(ImageButton)this.findViewById(R.id.ImageButton);

      String[] columns={Media.DATA,Media._ID,Media.TITLE,Media.DISPLAY_NAME};

      cursor=managedQuery(Media.EXTERNAL_CONTENT_URI,columns,null,null,null);

      // long oneHourAgo=System.currentTimeMillis()/1000-(60*60);

      // String[] whereValues={""+oneHourAgo};

      // cursor=managedQuery(Media.EXTERNAL_CONTENT_URI,columns,

      // Media.DATE_ADDED+" > ?",whereValues,Media.DATE_ADDED+" ASC");

      fileColumn=cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);

      titleColumn=cursor.getColumnIndexOrThrow(Media.TITLE);//可簡寫成

      displayColumn=cursor.getColumnIndexOrThrow(Media.DISPLAY_NAME);

      if(cursor.moveToFirst())

      {

      titleTextView.setText(cursor.getString(titleColumn));

      imageFilePath=cursor.getString(fileColumn);

      bmp=getBitmap(imageFilePath);

      imageButton.setImageBitmap(bmp);

      }

      imageButton.setOnClickListener(new OnClickListener()

      {

      @Override

      public void onClick(View v)

      {

      // TODO Auto-generated method stub

      if(cursor.moveToNext())

      {

      titleTextView.setText(cursor.getString(titleColumn));

      imageFilePath=cursor.getString(fileColumn);

      bmp=getBitmap(imageFilePath);

      imageButton.setImageBitmap(bmp);

      }

      }

      });

      }

      private Bitmap getBitmap(String imageFilePath)

      {

      // 加載圖像的尺寸而不是圖像本身

      BitmapFactory.Options bmpFactoryOptions=new BitmapFactory.Options();

      bmpFactoryOptions.inJustDecodeBounds=true;

      Bitmap bmp=BitmapFactory.decodeFile(imageFilePath, bmpFactoryOptions);

      int heightRatio=(int)Math.ceil(bmpFactoryOptions.outHeight/(float)dh);

      int widthRatio=(int)Math.ceil(bmpFactoryOptions.outWidth/(float)dw);

      Log.v("HEIGHT RATIO",""+heightRatio);

      Log.v("WIDTH RATIO",""+widthRatio);

      // 如果兩個比率都大于1,那么圖像的一條邊將大于屏幕

      if(heightRatio>1&&widthRatio>1)

      {

      if(heightRatio>widthRatio)

      {

      // 如果高度比率更大,則根據它縮放

      bmpFactoryOptions.inSampleSize=heightRatio;

      }

      else

      {

      // 若寬度比率更大,則根據它縮放

      bmpFactoryOptions.inSampleSize=widthRatio;

      }

      }

      // 對它進行真正的解碼

      bmpFactoryOptions.inJustDecodeBounds=false;

      bmp=BitmapFactory.decodeFile(imageFilePath, bmpFactoryOptions);

      return bmp;

      }

      }

      利用ExitInterface修改EXIF信息

      1.EXIF 表示可交換的圖像文件格式,它是在圖像文件中保存元數據的一種標準方式。一般大多數標記與所捕獲圖像本身的數據相關,如ExposureTime和ShutterSpeedValue。

      然而,有一些標記可以考慮填寫或修改。

      UserComment:由用戶生成的備注

      利用MediaStore檢索圖像+利用ExitInterface修改EXIF信息

      ImageDescription:標題

      Artist:圖像的創建者或接受者

      Copyright:圖像的版權持有人

      Software:用于創建圖像的軟件

      Android為我們提供了一種讀寫EXIF數據的方法,該方法的主要類是ExifInterface。

      示例代碼:

      //如何使用ExifInterface從一個圖像文件讀取特定的EXIF數據

      ExifInterface ei=new ExifInterface(imageFilePath);

      String imageDescription=ei.getAttribute("ImageDescription");

      if(imageDescription!=null)

      {

      Log.v("EXIF",imageDescription);

      }

      //如何使用ExifInterface將EXIF數據保存到圖像文件中

      ei.setAttribute("ImageDescription","Something New");

      Android

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:UCOS學習筆記——堆棧
      下一篇:云桌面配合NAT實現公網訪問配置實踐
      相關文章
      亚洲AV无码乱码国产麻豆穿越| 亚洲国产一二三精品无码| 亚洲国产精久久久久久久| 在线观看亚洲天天一三视| 亚洲天堂中文字幕在线| 婷婷国产偷v国产偷v亚洲| 亚洲中文精品久久久久久不卡| 国产成+人+综合+亚洲专| 亚洲1234区乱码| 亚洲砖码砖专无区2023| 亚洲愉拍一区二区三区| 亚洲av无码专区国产不乱码| WWW亚洲色大成网络.COM | 国产一区二区三区亚洲综合| 国产成人精品日本亚洲语音| 国产精品亚洲一区二区无码| 国产精品成人亚洲| 亚洲精品成人区在线观看| 亚洲精品国产高清嫩草影院| 国产精品亚洲综合一区| 久久精品国产亚洲沈樵| 久久亚洲精品成人综合| 亚洲伊人久久大香线蕉苏妲己| 亚洲高清美女一区二区三区| 亚洲人成综合在线播放| 自拍偷区亚洲国内自拍| 亚洲AV无码国产一区二区三区 | 亚洲AV无码一区二区三区鸳鸯影院| 亚洲av综合日韩| 亚洲一级片内射网站在线观看| 国产综合精品久久亚洲| 久久91亚洲人成电影网站| 久久亚洲AV成人无码国产| 亚洲国产美女精品久久| 亚洲综合av一区二区三区| 亚洲av高清在线观看一区二区| 国产精品亚洲二区在线观看| 水蜜桃亚洲一二三四在线 | 国产亚洲精品91| 亚洲精品亚洲人成在线观看| 亚洲色图国产精品|