靜態
View Code
import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.Rect;import android.media.MediaMetadataRetriever;import android.util.Log;import android.view.View;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); }}
動態
View Code
public 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; }