擷取Android手機上的圖片和影片縮圖

來源:互聯網
上載者:User
作者: Android開發網原創 時間: 2010-10-20

   大家都知道Android從1.5開始剛插入SD卡時系統會調用MediaScanner服務進行後台掃描,索引新的歌曲、圖片和視頻等資訊,如果我們需要快速提取圖片和影片縮圖可以直接存取 android.provider.MediaStore.Images.Thumbnails 和android.provider.MediaStore.Video.Thumbnails這兩個資料庫,即可查詢出來縮圖

  如何判斷檔案呢? 可以通過Cursor遍曆資料庫,對比INTERNAL_CONTENT_URI欄位的值,這是一個Uri我們可以轉成String,這裡儲存著Android手機SD卡上的多媒體檔案完整路徑,

  有關具體的縮圖可以通過getThumbnail(ContentResolver cr, long origId, int kind, BitmapFactory.Options options) 或getThumbnail(ContentResolver cr, long origId, long groupId, int kind, BitmapFactory.Options options) 方法擷取,這兩種方法返回Bitmap類型,而縮圖的解析度可以從HEIGHT和WIDTH兩個欄位提取,在Android上縮圖分為兩種,通過讀取KIND欄位來獲得,分別為MICRO_KIND和MINI_KIND
分別為微型和迷你兩種縮減模式,前者的解析度更低。這樣我們平時擷取檔案系統的某個圖片預覽時,可以直接調用系統縮圖,而不用自己重新計算。

  最後Android123提示大家,縮圖儲存在SD卡的DCIM目錄,裡面的.thumbnails是圖片的,而.video_thumbnails是視頻的,這兩個檔案夾為隱藏屬性,一般的檔案管理工具都可以看到。

轉貼:http://www.android123.com.cn/androidkaifa/665.html

============================================================================================================================

1、Video

對於視頻,取第一幀作為縮圖,也就是怎樣從filePath得到一個Bitmap對象。
private Bitmap createVideoThumbnail(String filePath) {
Bitmap bitmap = null;
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
try {
retriever.setMode(MediaMetadataRetriever.MODE_CAPTURE_FRAME_ONLY);
retriever.setDataSource(filePath);
bitmap = retriever.captureFrame();
} catch(IllegalArgumentException ex) {
// Assume this is a corrupt video file
} catch (RuntimeException ex) {
// Assume this is a corrupt video file.
} finally {
try {
retriever.release();
} catch (RuntimeException ex) {
// Ignore failures while cleaning up.
}
}
return bitmap;
}
複製代碼
Android提供了MediaMetadataRetriever,由JNI(media_jni)實現。
看得出MediaMetadataRetriever主要有兩個功能:MODE_GET_METADATA_ONLY和MODE_CAPTURE_FRAME_ONLY
這裡設mode為MODE_CAPTURE_FRAME_ONLY,調用captureFrame取得一幀。

另外還有兩個方法可以用:
extractMetadata 提取檔案資訊,ARTIST、DATE、YEAR、DURATION、RATING、FRAME_RATE、VIDEO_FORMAT
和extractAlbumArt 提取專輯資訊,這個下面的音樂檔案可以用到。

2、Music
對於音樂,取得AlbumImage作為縮圖,還是用MediaMetadataRetriever
private Bitmap createAlbumThumbnail(String filePath) {
Bitmap bitmap = null;
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
try {
retriever.setMode(MediaMetadataRetriever.MODE_GET_METADATA_ONLY);
retriever.setDataSource(filePath);
byte[] art = retriever.extractAlbumArt();
bitmap = BitmapFactory.decodeByteArray(art, 0, art.length);
} catch(IllegalArgumentException ex) {
} catch (RuntimeException ex) {
} finally {
try {
retriever.release();
} catch (RuntimeException ex) {
// Ignore failures while cleaning up.
}
}
return bitmap;
}
複製代碼
retriever.extractAlbumArt()得到的是byte數組,還需要一步用BitmapFactory編碼得到Bitmap對象。

3、Image
圖片就很簡單了
Bitmap bm = null;
Options op = new Options();
op.inSampleSize = inSampleSize;
op.inJustDecodeBounds = false;
bm = BitmapFactory.decodeFile(mFile.getPath(), op);
複製代碼
能直接得到Bitmap對象,把圖片縮小到合適大小就OK。
同樣上面的Video和Music,retrive到Bitmap後也需要縮小處理。

轉貼:http://blog.csdn.net/lanpy88/article/details/6602714

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.