1. 程式人生 > >android中 程式碼實現截圖功能(靜態+動態視訊)

android中 程式碼實現截圖功能(靜態+動態視訊)

分享下靜態截圖的功能程式碼:

public class ScreenShot {

    // 獲取指定Activity的截圖,儲存到png檔案

    static Bitmap takeScreenShot(Activity activity) {

    	Log.i("TAG","tackScreenShot");
        // View是你須要截圖的View
        View view = activity.getWindow().getDecorView();
        view.setDrawingCacheEnabled(true);
        view.buildDrawingCache();
        Bitmap b1 = view.getDrawingCache();

        // 獲取狀況欄高度
        Rect frame = new Rect();
        activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
        int statusBarHeight = frame.top;
        Log.i("TAG", "statusBarHeight = " + statusBarHeight);

        // 獲取螢幕長和高
        int width = activity.getWindowManager().getDefaultDisplay().getWidth();
        int height = activity.getWindowManager().getDefaultDisplay()
                .getHeight();

        // 去掉題目欄
        // Bitmap b = Bitmap.createBitmap(b1, 0, 25, 320, 455);
        Bitmap b = Bitmap.createBitmap(b1, 0, statusBarHeight, width, height
                - statusBarHeight);
        view.destroyDrawingCache();
        return b;
    }

    // 儲存到sdcard
    private static void savePic(Bitmap b, String strFileName) {

        FileOutputStream fos = null;
        try {
        	Log.i("TAG","start savePic");
            fos = new FileOutputStream(strFileName);
            Log.i("TAG","strFileName = " + strFileName);
            if (null != fos) {
                b.compress(Bitmap.CompressFormat.PNG, 90, fos);
                fos.flush();
                fos.close();
                Log.i("TAG","save pic");
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    public static void shoot(Activity a,String b) {
        //ScreenShot.savePic(ScreenShot.takeScreenShot(a), "sdcard/xx.png");
    	Log.i("TAG","shot");
    	Bitmap bitmap = ScreenShot.takeScreenShot(a);
		ScreenShot.savePic(bitmap, b);
    }
}


以下是對正在播放的視訊進行截圖的功能程式碼:

	private Bitmap createVideoThumbnail(String filePath) {
		Bitmap bitmap = null;
		android.media.MediaMetadataRetriever retriever = new android.media.MediaMetadataRetriever();
		try {// MODE_CAPTURE_FRAME_ONLY
//			retriever
//					.setMode(android.media.MediaMetadataRetriever.MODE_CAPTURE_FRAME_ONLY);
//			retriever.setMode(MediaMetadataRetriever.MODE_CAPTURE_FRAME_ONLY);
			retriever.setDataSource(filePath);
//			bitmap = retriever.captureFrame();
			String timeString = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
			long time = Long.parseLong(timeString) * 1000;
			Log.i("TAG","time = " + time);
			bitmap = retriever.getFrameAtTime(time*31/160); //按視訊長度比例選擇幀
		} 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 程式碼實現功能靜態+動態視訊

分享下靜態截圖的功能程式碼: public class ScreenShot { // 獲取指定Activity的截圖,儲存到png檔案 static Bitmap takeScreenShot(Activity activity) { L

android程式碼實現功能

android開發中通過View的getDrawingCache方法可以達到截圖的目的,只是缺少狀態列! 原始介面 截圖得到的圖片 程式碼實現 1. 新增許可權(AndroidManifest.xml檔案裡) <uses-permission android:

android實現功能程式碼

android開發中通過View的getDrawingCache方法可以達到截圖的目的,只是缺少狀態列! APP原始介面 儲存截圖的檔案 程式碼的實現 1. 新增許可權(AndroidManifest.xml檔案裡) <uses-perm

iPhone 應用裡實現功能程式碼

UIView *view = [[[[[UIApplication sharedApplication] windows] objectAtIndex:1] subviews] lastObject];//獲得某個window的某個subView    NSInteger i

Unity3d簡單的功能

首先,新建兩個場景,Scene1 在Scene1中新增一個Button。在Canvas繫結如下指令碼:     public Button but;     void Start ()     {         but = GameObject.Find ("

python程式碼實現識字

有次網上down了個截圖實識的軟體,發現一天只能用10次要錢才能解鎖免費,很氣,作為一個菜雞怎麼能忍受 於是自己用python寫了個簡單的小工具,分享給大家 程式碼如下: 先安裝庫 1 from PIL import ImageGrab,Image 2 import keyboard #監控鍵

Android工具之實現和禁止

轉載地址:http://blog.csdn.net/xietansheng/article/details/52689384; 1. 應用內的程式碼截圖(獲取View的快照) Android的View類中提供了獲取控制元件繪製快取的方法,這種截圖的方式僅限於應用內

AndroidListview實現點贊功能

最近這段時間一直在看Android,利用Listview去實現點贊功能 基本思路: 進入介面–》獲取資料–》 在Listview中顯示–》 通過map集合(position,boolean)儲存每一行是否被點選–》 利用實體類去儲存相應的物件–》 g

Unity 功能安卓、IOS

我們在一些專案中可能需要截圖儲存功能(特別是AR的一些專案),將截下來的圖儲存的相簿中,從而實現分享功能。下面就Android和IOS說一下他們是如何將圖片儲存到本地圖冊的。 關於安卓端,儲存到相簿方法很簡單,就是也路徑的問題,具體方法如下: public class

React Native呼叫Android原生程式碼實現車牌識別功能【附效果圖附原始碼】

        這段時間研究了下React Native,Facebook推出的,結合了Web應用和Native應用的優勢,可以使用JavaScript來開發iOS和Android原生應用,決定簡單研究下,於是開始搭建環境,編寫HelloWorld,完成後又覺得HelloWo

Appium+JAVA實現功能

接觸Appium時間不長,以下是截圖方法程式碼,做個筆記備忘。 //截圖 public void test(WebDriver driver){ File screen = ((RemoteWebDriver) driver).

在一張圖片上實現功能

C++實現的在一張圖片上截圖,在此記錄兩種方便的截圖方式: 一、使用ATL和MFC 優點:多位元組編碼與Unicode通用 缺點:不能跨平臺 #include <atlimage.h> bool shot(const TCHAR* src_img, const

js 利用html2canvas實現功能

需要匯入的檔案:jquery.min.js,html2canvas.js,canvas2image.js,jquery.qrcode.min.js(如需二維碼) var shareContent = document.getElementById("imgmodel");

Android模仿iOS實現側滑返回類似微信

actionbar fin kth ins any lean blog 模仿 over 我們都知道側滑返回操作是 iOS 裏面比較常見的功能,一般是手指在靠近手機屏幕左邊緣向右滑動就可以關閉當前的界面,iOS 系統提供了這樣的 API,但是 Android 怎麽實現呢? 網

vue實現復制功能項目使用

pre container audio all 自己 內容 erro con app 安裝依賴 npm install --save vue-clipboard2 用法: import Vue import VueClipboard from ‘vue-

android圖片的三級cache策略記憶體 檔案 網路

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

資料結構-順序表的實現以及一些功能c語言版本

#define MAXSIZE 100 //MAXSIZE為線性表可能的最大長度 #include<stdio.h> typedef int ElemType; typedef struct { ElemType data[MAXSIZE]; int length

okhttp實現註冊登入功能與伺服器端

請求方式:POST引數 :username,passwordURL  : http://**************/register?(這個我就不貼上來了)返回值:{status:400, msg:"註冊失敗", data:null}{status:200, msg:"註冊

如何使用Spring-security來實現登入驗證功能XML配置方式

先從使用xml的方式來實現使用者的許可權登入 (1)需要在maven工程中加上關於spring-secutity的jar包的依賴 //spring-securityd 有關的依賴 <

Jedis實現Publish/Subscribe功能釋出和訂閱

Redis為我們提供了publish/subscribe(釋出/訂閱)功能。我們可以對某個channel(頻道)進行subscribe(訂閱),當有人在這個channel上publish(釋出)訊息時,redis就會通知我們,這樣我們可以收到別人釋出的訊息。  作為Java的redis客戶端,Jedis提