您的位置:首页 > 移动开发 > Android开发

android截图

2015-07-19 18:26 525 查看
package com.chenhl.testusbconnect.utils;

/**

* ScreenShotFb.java

* 版权所有(C) 2014

* 创建者:cuiran 2014-4-3 下午4:55:23

*/

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 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= "/sdcard/hc.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<piex.length;i+=2)

// {

// colors[i/2]= (int)0xff000000 +

// (int) (((piex[i+1]) << (16))&0x00f80000)+

// (int) (((piex[i+1]) << 13)&0x0000e000)+

// (int) (((piex[i]) << 5)&0x00001A00)+

// (int) (((piex[i]) << 3)&0x000000f8);

// }

for(int i=0;i<piex.length;i+=4)

{

colors[i/4]=

(0xff000000)|

(((piex[i+2]&0xff) << 16))|

(((piex[i+1]&0xff) << 8) )|

((piex[i+0]&0xff))
;

}

// 得到屏幕bitmap

return Bitmap.createBitmap(colors, screenWidth, screenHeight,

Bitmap.Config.ARGB_8888);

} catch (FileNotFoundException e) {

// LogUtil.e(TAG, "FileNotFoundException error",e);

} catch (IOException e) {

// LogUtil.e(TAG, "IOException error",e);

}catch (Exception e) {

// LogUtil.e(TAG, "Exception error",e);

}

finally {

if(buf!=null){

try {

buf.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

return null;

}



}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: