Android屏幕截图有很多方式这里只使用其中一种截图

主要是读取/dev/graphics/fb0,进行转换,复杂点就在如何把读取的数据进行转换。

可以参考一下这篇文章:http://blog.chinaaet.com/detail/28298

下面给出程序代码

/** * ScreenShotFb.java * 版权所有(C) 2014 * 创建者:cuiran 2014-4-3 下午4:55:23 */package com.ghyf.mplay.util;import java.io.DataInputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import com.ghyf.mplay.value.ConstantValue;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.PixelFormat;import android.util.DisplayMetrics;import android.view.Display;/** * FrameBuffer中获取Android屏幕截图  * @author cuiran * @version 1.0.0 */public class ScreenShotFb {private static final String TAG="ScreenShotFb";final static String FB0FILE1 = "/dev/graphics/fb0";static File fbFile;  //程序入口      public static  void shoot(){       try {       /************ 创建锁对象 ************/            final Object lock = new Object();                    synchronized (lock) {        long start=System.currentTimeMillis();        Bitmap bitmap=getScreenShotBitmap();            long end=System.currentTimeMillis();            LogUtil.i(TAG, "getScreenShotBitmap time is :"+(end-start)+" ms");            String filePath= ConstantValue.ROOT_SDCARD_DIR+"/s.png";//            String filePath= ConstantValue.ROOT_SDCARD_DIR+"/screens/"+System.currentTimeMillis()+".png";            ScreenShotFb.savePic(bitmap,filePath);          }         }catch (Exception e) {           LogUtil.e(TAG, "Exception error",e);         }              }   //保存到sdcard  public static void savePic(Bitmap b,String strFileName){          FileOutputStream fos = null;          try {              fos = new FileOutputStream(strFileName);              if (null != fos)              {                  b.compress(Bitmap.CompressFormat.PNG, 50, fos);                  fos.flush();                  fos.close();              }          } catch (FileNotFoundException e) {          LogUtil.e(TAG, "FileNotFoundException error",e);        } catch (IOException e) {          LogUtil.e(TAG, "IOException error",e);        }                  LogUtil.i(TAG, "savePic success");    }   public static void init(Activity activity){  try {DisplayMetrics dm = new DisplayMetrics();Display display = activity.getWindowManager().getDefaultDisplay();display.getMetrics(dm);screenWidth = dm.widthPixels; // 屏幕宽(像素,如:480px)screenHeight = dm.heightPixels; // 屏幕高(像素,如:800p)int pixelformat = display.getPixelFormat();PixelFormat localPixelFormat1 = new PixelFormat();PixelFormat.getPixelFormatInfo(pixelformat, localPixelFormat1);int deepth = localPixelFormat1.bytesPerPixel;// 位深LogUtil.i(TAG, "deepth="+deepth);piex = new byte[screenHeight * screenWidth*deepth] ;// 像素colors = new int[screenHeight * screenWidth];}catch(Exception e){LogUtil.e(TAG, "Exception error",e);} } static DataInputStream dStream=null; static byte[] piex=null; static int[] colors =null; static int screenWidth; static int screenHeight; public static synchronized Bitmap getScreenShotBitmap() {FileInputStream buf = null;try {fbFile = new File(FB0FILE1);buf = new FileInputStream(fbFile);// 读取文件内容dStream=new DataInputStream(buf);dStream.readFully(piex);dStream.close();// 将rgb转为色值  for(int i=0;i



调用时候需要先init 然后在shoot

更多相关文章

  1. 【Android开发经验】兼容不同的屏幕大小(推荐,最官方的适应屏幕大
  2. android屏幕分辨率分类
  3. Android(安卓)数据显示在屏幕上
  4. Android(安卓)Studio FFmpeg视频解码播放
  5. Android在诸如editText等组件设置输入法半屏幕显示的说明
  6. Android系统自带录屏(动态截屏)功能
  7. 获取手机屏幕大小
  8. 始终悬浮在Android屏幕的弹窗
  9. Android(安卓)Density

随机推荐

  1. Android(安卓)Activity界面切换添加动画
  2. Android中滑屏初探 ---- scrollTo 以及 s
  3. Android(安卓)任务和回退堆栈---启动任务
  4. Android简易实战教程--第三十九话《Chron
  5. android解决坚屏拍照和保存图片旋转90度
  6. android感应器Senor
  7. 【Android】Android(安卓)相关下载
  8. Android(安卓)Paging组件Demo
  9. android 单元测试
  10. android上一些方法的区别和用法的注意事