android中 代码实现截图功能(静态+动态视频)

来源:互联网 发布:c语言中条件表达式 编辑:程序博客网 时间:2024/06/08 00:44

分享下静态截图的功能代码:

[java] view plaincopyprint?
  1. public class ScreenShot {  
  2.   
  3.     // 获取指定Activity的截屏,保存到png文件  
  4.   
  5.     static Bitmap takeScreenShot(Activity activity) {  
  6.   
  7.         Log.i("TAG","tackScreenShot");  
  8.         // View是你须要截图的View  
  9.         View view = activity.getWindow().getDecorView();  
  10.         view.setDrawingCacheEnabled(true);  
  11.         view.buildDrawingCache();  
  12.         Bitmap b1 = view.getDrawingCache();  
  13.   
  14.         // 获取状况栏高度  
  15.         Rect frame = new Rect();  
  16.         activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);  
  17.         int statusBarHeight = frame.top;  
  18.         Log.i("TAG""statusBarHeight = " + statusBarHeight);  
  19.   
  20.         // 获取屏幕长和高  
  21.         int width = activity.getWindowManager().getDefaultDisplay().getWidth();  
  22.         int height = activity.getWindowManager().getDefaultDisplay()  
  23.                 .getHeight();  
  24.   
  25.         // 去掉题目栏  
  26.         // Bitmap b = Bitmap.createBitmap(b1, 0, 25, 320, 455);  
  27.         Bitmap b = Bitmap.createBitmap(b1, 0, statusBarHeight, width, height  
  28.                 - statusBarHeight);  
  29.         view.destroyDrawingCache();  
  30.         return b;  
  31.     }  
  32.   
  33.     // 保存到sdcard  
  34.     private static void savePic(Bitmap b, String strFileName) {  
  35.   
  36.         FileOutputStream fos = null;  
  37.         try {  
  38.             Log.i("TAG","start savePic");  
  39.             fos = new FileOutputStream(strFileName);  
  40.             Log.i("TAG","strFileName = " + strFileName);  
  41.             if (null != fos) {  
  42.                 b.compress(Bitmap.CompressFormat.PNG, 90, fos);  
  43.                 fos.flush();  
  44.                 fos.close();  
  45.                 Log.i("TAG","save pic");  
  46.             }  
  47.         } catch (FileNotFoundException e) {  
  48.             e.printStackTrace();  
  49.         } catch (IOException e) {  
  50.             e.printStackTrace();  
  51.         }  
  52.     }  
  53.   
  54.   
  55.     public static void shoot(Activity a,String b) {  
  56.         //ScreenShot.savePic(ScreenShot.takeScreenShot(a), "sdcard/xx.png");  
  57.         Log.i("TAG","shot");  
  58.         Bitmap bitmap = ScreenShot.takeScreenShot(a);  
  59.         ScreenShot.savePic(bitmap, b);  
  60.     }  
  61. }  


以下是对正在播放的视频进行截图的功能代码:

[java] view plaincopyprint?
  1.     private Bitmap createVideoThumbnail(String filePath) {  
  2.         Bitmap bitmap = null;  
  3.         android.media.MediaMetadataRetriever retriever = new android.media.MediaMetadataRetriever();  
  4.         try {// MODE_CAPTURE_FRAME_ONLY  
  5. //          retriever  
  6. //                  .setMode(android.media.MediaMetadataRetriever.MODE_CAPTURE_FRAME_ONLY);  
  7. //          retriever.setMode(MediaMetadataRetriever.MODE_CAPTURE_FRAME_ONLY);  
  8.             retriever.setDataSource(filePath);  
  9. //          bitmap = retriever.captureFrame();  
  10.             String timeString = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);  
  11.             long time = Long.parseLong(timeString) * 1000;  
  12.             Log.i("TAG","time = " + time);  
  13.             bitmap = retriever.getFrameAtTime(time*31/160); //按视频长度比例选择帧  
  14.         } catch (IllegalArgumentException ex) {  
  15.             // Assume this is a corrupt video file  
  16.         } catch (RuntimeException ex) {  
  17.             // Assume this is a corrupt video file.  
  18.         } finally {  
  19.             try {  
  20.                 retriever.release();  
  21.             } catch (RuntimeException ex) {  
  22.                 // Ignore failures while cleaning up.  
  23.             }  
  24.         }  
  25.         return bitmap;  
  26.     }

原创粉丝点击