1. 程式人生 > >在檔案管理器中顯示圖片的縮圖和視訊第一幀的縮圖

在檔案管理器中顯示圖片的縮圖和視訊第一幀的縮圖

  • 首先在vender/mediatek/properties/packags/apps/FileManager/src/com/mediatek/filemanager/IconManager.java中匯入兩個類
    import android.media.ThumbnailUtils;
    import android.provider.MediaStore.Video.Thumbnails;

  • 在getIcon方法中新增
    Bitmap icon=null;//方法已經定義,不需新增
    //顯示圖片縮圖
    if(mimeType.startsWith("image/")){
    Bitmap bitmap=BitmapFactory.decodeFile(fileInfo.getFileAbsolutePath());//fileInfo.getFileAbsolutePath()方法得到檔案路徑的字串形式
    icon=ThumbnailUtils.extractThumbnail(bitmap,96,96,ThumbnailUtils.OPTIONS_RECYCLE_INPUT);
    }
    //顯示視訊第一幀縮圖
    if(mimeType.startsWith("video/")){
    icon=ThumbnailUtils.createVideoThumbnail(fileInfo.getFileAbsolutePath(),Thumbnails.MICRO_KIND);
    }
    //針對HTML和HTM檔案字尾進行判別顯示相應的圖片
    int iconId=getDrawableId(service,mimeType);//已經定義,無需新增
    if(mimeType.startsWith("text/html")){
    if(fileInfo.getFileAbsolutePath().endsWith("html")){
    iconId=R.drawable.fm_html;
    }
    else{
    iconId=R.drawable.fm_htm;
    }
    }

  • 在不知道以上方法的時候,以下是載入圖片縮圖在網上找到的另外一種實現方式
    private static int calculateInSampleSize(BitmapFactory.Options options,
                int reqWidth, int reqHeight) {
            final int height = options.outHeight;
            final int width = options.outWidth;
            int inSampleSize = 1;
            if (height > reqHeight || width > reqWidth) {
                final int halfHeight = height / 2;
                final int halfWidth = width / 2;
                while ((halfHeight / inSampleSize) > reqHeight
                        && (halfWidth / inSampleSize) > reqWidth) {
                    inSampleSize *= 2;
                }
            }
            return inSampleSize;
        }
     
        // 如果是放大圖片,filter決定是否平滑,如果是縮小圖片,filter無影響
        private static Bitmap createScaleBitmap(Bitmap src, int dstWidth,
                int dstHeight) {
            Bitmap dst = Bitmap.createScaledBitmap(src, dstWidth, dstHeight, false);
            if (src != dst) { // 如果沒有縮放,那麼不回收
                src.recycle(); // 釋放Bitmap的native畫素陣列
            }
            return dst;
        }
     
        // 從Resources中載入圖片
        public static Bitmap decodeSampledBitmapFromResource(Resources res,
                int resId, int reqWidth, int reqHeight) {
            final BitmapFactory.Options options = new BitmapFactory.Options();
            options.inJustDecodeBounds = true;
            BitmapFactory.decodeResource(res, resId, options); // 讀取圖片長寬
            options.inSampleSize = calculateInSampleSize(options, reqWidth,
                    reqHeight); // 計算inSampleSize
            options.inJustDecodeBounds = false;
            Bitmap src = BitmapFactory.decodeResource(res, resId, options); // 載入一個稍大的縮圖
            return createScaleBitmap(src, reqWidth, reqHeight); // 進一步得到目標大小的縮圖
        }
     
        // 從sd卡上載入圖片
        public static Bitmap decodeSampledBitmapFromFd(String pathName,
                int reqWidth, int reqHeight) {
            final BitmapFactory.Options options = new BitmapFactory.Options();
            options.inJustDecodeBounds = true;
            BitmapFactory.decodeFile(pathName, options);
            options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
            options.inJustDecodeBounds = false;
            Bitmap src = BitmapFactory.decodeFile(pathName, options);
            return createScaleBitmap(src, reqWidth, reqHeight);
        }

  • 將以上方法新增到類IconManager中,同時在getIcon方法中新增呼叫以上方法的語句
    if(mimeType.startsWith("image/")){
    icon=decodeSampleBitmapFromFd(fileInfo.getFileabsolutePath(),96,96);
    }

  • 此方法可以實現圖片縮圖的顯示,但是對圖片進行刪除操作時,會出現報錯,程式終止退出,報錯內容如下
  • 通過報錯資訊我們可以發現錯誤出現在下面這句程式碼上,應該是在刪除圖片後,src為null,該方法不能解析空資源,會丟擲檔案找不到異常(FileNotFoundException)因此報錯
    Bitmap dst = Bitmap.createScaledBitmap(src, dstWidth, dstHeight, false);
  • 我的解決方法是對資源src進行判斷,如果資源為空則不進行資源解析,即不執行上面的程式碼,修改如下
    private static Bitmap createScaleBitmap(Bitmap src, int dstWidth,
                int dstHeight) {
    Bitmap dst=null;
    if(src!=null){
    dst = Bitmap.createScaledBitmap(src, dstWidth, dstHeight, false);
    }
            if (src != dst) { 
                src.recycle();
            }
            return dst;
        }
     

  • 結果成功

相關推薦

檔案管理顯示圖片視訊第一

首先在vender/mediatek/properties/packags/apps/FileManager/src/com/mediatek/filemanager/IconManager.java中匯入兩個類import android.media.ThumbnailU

Android 載入本地圖片(檔案管理圖片牆)

Android 載入本地圖片(檔案管理器中的圖片牆) --關於圖片牆的一些感悟與疑問,希望大家共同探討。 (By伊葉也) 圖片顯示及監聽 1、圖片顯示:基本上就5種顯示形式(如果同時嵌入5種形式,採用

刪除Win10檔案管理的文件音樂視訊OneDrive快速訪問等

一、刪除Win10檔案管理器中的文件/音樂/視訊等在Windows 10下開啟這臺電腦,除了會顯示磁碟碟符外,在資源管理器上半部分還會顯示6個資料夾,這6個資料夾就像6個核桃一樣,對一些人有用,對一些人沒有用。有些強迫症的童鞋表示不能忍受,下面介紹怎樣刪除這幾個資料夾。環境:Windows10專業版開啟登錄檔

ubuntu 18.04視訊檔案無法在檔案管理預覽的解決辦法

手動升級到18.04之後發現視訊的預覽無法載入 不知道為什麼 後來查了一下,發現瞭解決辦法 首先我們先安裝如下包 sudo apt install ffmpegthumbnailer 之後我們刪除一

linux 修改檔案管理 資料夾名稱

方法一: 首先修改現有主資料夾下各資料夾名稱: Desktop、 Documents、 Download、 Music、 Pictures、 Public、 Templates、 Videos …… 然後編輯配置檔案: vim ~/.config/user-dirs.di

如何在Ubuntu檔案管理檢視隱藏檔案資料夾

Ubuntu檔案管理器 本文介紹如何在Ubuntu 18.04 LTS系統上檢視Ubuntu檔案瀏覽器中的隱藏檔案和資料夾。您可以從Ubuntu桌面上的“活動”檢視訪問檔案瀏覽器。 檢視隱藏內容的最簡單方法是在檔案瀏覽器開啟時使用Ctrl + h組合鍵。在下圖中,您可以看到現在顯示的所有隱藏內容:

Android視訊處理 --處理視訊第一

從API 8開始,新增了一個類: android.media.ThumbnailUtils這個類提供了3個靜態方法一個用來獲取視訊第一幀得到的Bitmap,2個對圖片進行縮略處理。 ? 1 public static Bitmap createVi

Android 獲取視訊第一

乾貨 從API 8開始,新增了一個類: android.media.ThumbnailUtils這個類提供了3個靜態方法一個用來獲取視訊第一幀得到的Bitmap,2個對圖片進行縮略處理。 public static Bitmap createVideoThumbna

Android -- 獲取視訊第一

從API 8開始,新增了一個類: android.media.ThumbnailUtils這個類提供了3個靜態方法一個用來獲取視訊第一幀得到的Bitmap,2個對圖片進行縮略處理。 public static Bitmap createVideoThumbnail (

檔案管理識別某種型別的檔案顯示相應型別的圖片

首先找到載入型別圖片的位置在vender/mediatek/properties/packags/apps/FileManager/src/com/mediatek/filemanager/FileI

獲取 window任務欄已經打開應用程序窗口(也就是任務管理前臺進程)的

public name rgs ges pub 集合 icon pid 完整 獲取 window任務欄已經打開應用程序窗口(也就是任務管理器中前臺進程)的圖標 1.功能描述 獲取到window任務欄已經打開的應用程序的窗口圖標。如下:(要獲取到QQ,瀏覽器,文件夾的圖

如何刪除Windows10操作系統資源管理的下載、圖片、音樂、文檔、視頻、桌面、3D對象這7個文件夾

war reg ren 操作系統 esp 桌面 bcf pac cal 通過註冊表刪除,步驟如下: 1、按下win+R,輸入regedit,打開註冊表 2、找到位置:計算機\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr

eclipse增加工程檔案在windows資源管理開啟

方法有二: 一: 1.點選configurations,不同版本可能不一樣,大概就在這裡啦 2. 按截圖填寫即可,最後點選run,就開啟當前檔案所在的目錄啦 第二種方法: 安裝pathtools外掛, 外掛在http://code.google.com/p/path

Windows 檔案資源管理搜索帶特殊字元檔名的方法

今天處理一些檔案,資料夾這包含有類似《~$16年普通高等學校招生全國統一考試-英語》的檔名,想全部找出來刪除掉,直接在檔案資源管理器裡面輸入“~$”是搜尋不到想要的檔案的,這些是特殊字元,所以,就想是不是像程式設計一樣也有轉義符之類的,就進行網上搜索和測試,終於找到解決辦法,輸入~"*~$*"即可搜

C#如何在資源管理開啟資料夾並定位檔案

private void OpenFolderAndSelectFile(String fileFullName) {     System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessSt

eclipse檔案目錄快速定位,開啟檔案所在資料夾,在資源管理檢視

 viewFile.bat (開啟選中的檔案獲取資料夾) Explorer/e,/select,%1 viewjava.bat (開啟選中的檔名對應的.java檔案) @echo off set calssdir=%1 set package=%2 set pack

18、android呼叫系統自帶檔案管理並返回選中檔案的路徑

思路: 通過Android API呼叫系統自帶的檔案瀏覽器選取檔案獲得URI,然後將URI轉換成file,從而得到file。 import android.annotation.SuppressLint;import android.app.Activity;impo

vue檔案在sublime編輯顯示高亮

1.首先在sublime中安裝Package Control.sublime-package(地址:https://sublime.wbond.net/Package%20Control.sublime-package) 2.將檔案放在sublime中,注意:是放在Subl

android檔案管理開發遇到的一些問題

1.難點主要有如何獲取外掛裝置的資訊以及路徑無論是U盤還是TF卡等等 獲取方式在其他部落格中請自己檢視。 2.在Android6.0中想要對外部裝置進行的檔案的操作是比較難的 因為6.0中Android系統對外部儲存器操作的許可權進行了修改,所以只能進行讀操作,無法進行對外