android中 代码实现截图功能(静态+动态视频)
16lz
2022-03-09
分享下静态截图的功能代码:
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 第15天 -使用SQLiteOpenHelper获取用于操作数据库的
- 简单的 Android(安卓)拍照并显示以及获取路径后上传
- Android获取cpu和内存信息、网址的代码
- Android之使用RatingBar设置游戏难度并保存
- Android获取设备唯一标识
- Android的第二个应用---电话拨号器
- android API key 如何获取
- 详解Android获取系统内核版本的方法与实现代码
- Android(安卓)用代码获取基站号(cell)和小区号(lac)