android中 代码实现截图功能(静态+动态视频)
16lz
2021-01-23
分享下静态截图的功能代码:
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代码中运行shell命令
- Android获取cpu和内存信息、网址的代码
- Android Studio 配置SVN 及 代码管理
- Android实现发送短信功能实例详解
- Android中拍照、图片、录音、视频和音频功能的方法和代码
- 【Android休眠】之Android对PowerKey事件的处理(1)代码流程
- android声音调整源代码分析
- Android 用代码获取基站号(cell)和小区号(lac)
- Android第一行代码(第二版)