首页 > 其他分享 >取得当前屏幕的截图

取得当前屏幕的截图

时间:2023-05-01 14:07:14浏览次数:29  
标签:截图 null bitmap static 当前 屏幕 Bitmap out view


取得当前屏幕的截图主要使用了Bitmap 类里的方法,首相取得一个bitmap 然后用取得的bitmap 去绘制一张图片然后进行保存。

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Rect;
import android.os.Environment;
import android.util.Log;
import android.view.View;
public class ShotScreen {
	
	private static final String TAG="shotscreen";
	@SuppressWarnings("unused")
	private static Bitmap takeScreenShot(Activity activity){
		View view =activity.getWindow().getDecorView();
		view.setDrawingCacheEnabled(true);
		view.buildDrawingCache();
		Bitmap bitmap = view.getDrawingCache();
		Rect rect = new Rect();
		activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
		int statusBarHeight = rect.top;
		System.out.println(statusBarHeight);
		
		int width =activity.getWindowManager().getDefaultDisplay().getWidth();
		int height =activity.getWindowManager().getDefaultDisplay().getHeight();
		
		Bitmap bitmap2 = Bitmap.createBitmap(bitmap,0,statusBarHeight, width, height - statusBarHeight);
		view.destroyDrawingCache();
		return bitmap2;
	}
	
	@SuppressWarnings("unused")
	private static void savePic(Bitmap bitmap,String filename){
		FileOutputStream fileOutputStream = null;
		try {
			fileOutputStream = new FileOutputStream(filename);
			if (fileOutputStream != null) {
				bitmap.compress(Bitmap.CompressFormat.PNG, 90, fileOutputStream);
				fileOutputStream.flush();
				fileOutputStream.close();
			}
		} catch (FileNotFoundException e) {
			Log.d(TAG, "Exception:FileNotFoundException");
			e.printStackTrace();
		} catch (IOException e) {
			Log.d(TAG, "IOException:IOException");
			e.printStackTrace();
		}
	}
	
	
	/**
	 * 
	 * @param a
	 */
	public static void shoot(Activity a){
		if (android.os.Environment.MEDIA_MOUNTED != "mounted") {
			ShotScreen.savePic(ShotScreen.takeScreenShot(a), "/sdcard/抽样.png");   
		}else{
			ShotScreen.savePic(ShotScreen.takeScreenShot(a), "/data/data/"+a.getPackageName()+"/抽样.png");
		}
    }



android之截屏(包括截取scrollview与listview的)


public class ScreenShot {
    // 获取指定Activity的截屏,保存到png文件
    public static Bitmap takeScreenShot(Activity activity) {
        // 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;
        System.out.println(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();
        savePic(b, "/sdcard/screen_test.png");
        return b;
    }
 
    // 保存到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, 90, fos);
                fos.flush();
                fos.close();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
    /**
     * 把View对象转换成bitmap
     * */
    public static Bitmap convertViewToBitmap(View view) {
        view.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
                MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
        view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
        view.buildDrawingCache();
        Bitmap bitmap = view.getDrawingCache();
        if (bitmap != null) {
            System.out.println("这不是nullde1");
            Log.d("nullde1", "nullde1");
        } else {
            System.out.println("这nullnulllnulnlul");
        }
        return bitmap;
    }
 
    // 程序入口1
    public static void shoot(Activity a) {
        ScreenShot.savePic(ScreenShot.takeScreenShot(a), "/sdcard/screen_test.png");
    }
 
    // 程序入口2
    public static void shootView(View view) {
        ScreenShot.savePic(ScreenShot.convertViewToBitmap(view),
                "sdcard/xx.png");
    }
 
    public static Bitmap getViewBitmap(View v) {
        v.clearFocus();
        v.setPressed(false);
 
        boolean willNotCache = v.willNotCacheDrawing();
        v.setWillNotCacheDrawing(false);
 
        // Reset the drawing cache background color to fully transparent
        // for the duration of this operation
        int color = v.getDrawingCacheBackgroundColor();
        v.setDrawingCacheBackgroundColor(0);
 
        if (color != 0) {
            v.destroyDrawingCache();
        }
        v.buildDrawingCache();
        Bitmap cacheBitmap = v.getDrawingCache();
        if (cacheBitmap == null) {
            Log.e("TTTTTTTTActivity", "failed getViewBitmap(" + v + ")",
                    new RuntimeException());
            return null;
        }
 
        Bitmap bitmap = Bitmap.createBitmap(cacheBitmap);
 
        // Restore the view
        v.destroyDrawingCache();
        v.setWillNotCacheDrawing(willNotCache);
        v.setDrawingCacheBackgroundColor(color);
 
        return bitmap;
    }
 
    /**
     * 截取scrollview的屏幕
     * **/
    public static Bitmap getBitmapByView(ScrollView scrollView) {
        int h = 0;
        Bitmap bitmap = null;
        // 获取listView实际高度
        for (int i = 0; i < scrollView.getChildCount(); i++) {
            h += scrollView.getChildAt(i).getHeight();
            scrollView.getChildAt(i).setBackgroundResource(R.drawable.bg3);
        }
        Log.d(TAG, "实际高度:" + h);
        Log.d(TAG, " 高度:" + scrollView.getHeight());
        // 创建对应大小的bitmap
        bitmap = Bitmap.createBitmap(scrollView.getWidth(), h,
                Bitmap.Config.ARGB_8888);
        final Canvas canvas = new Canvas(bitmap);
        scrollView.draw(canvas);
        // 测试输出
        FileOutputStream out = null;
        try {
            out = new FileOutputStream("/sdcard/screen_test.png");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        try {
            if (null != out) {
                bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
                out.flush();
                out.close();
            }
        } catch (IOException e) {
            // TODO: handle exception
        }
        return bitmap;
    }
 
    private static String TAG = "Listview and ScrollView item 截图:";
 
    /**
     *  截图listview
     * **/
    public static Bitmap getbBitmap(ListView listView) {
        int h = 0;
        Bitmap bitmap = null;
        // 获取listView实际高度
        for (int i = 0; i < listView.getChildCount(); i++) {
            h += listView.getChildAt(i).getHeight();
        }
        Log.d(TAG, "实际高度:" + h);
        Log.d(TAG, "list 高度:" + listView.getHeight());
        // 创建对应大小的bitmap
        bitmap = Bitmap.createBitmap(listView.getWidth(), h,
                Bitmap.Config.ARGB_8888);
        final Canvas canvas = new Canvas(bitmap);
        listView.draw(canvas);
        // 测试输出
        FileOutputStream out = null;
        try {
            out = new FileOutputStream("/sdcard/screen_test.png");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        try {
            if (null != out) {
                bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
                out.flush();
                out.close();
            }
        } catch (IOException e) {
            // TODO: handle exception
        }
        return bitmap;
    }
 
}




Android中View转换为Bitmap及getDrawingCache=null的解决方法



标签:截图,null,bitmap,static,当前,屏幕,Bitmap,out,view
From: https://blog.51cto.com/u_5454003/6238863

相关文章

  • 复制远程服务器到当前服务器
    命令:目录:-r端口号:-e'ssh-p20022'rsync-r-e'ssh-pxxxxx'username@ip:/home/vps/data/远程文件夹地址,复制的目标地址。......
  • 开发中用的比较顺手的截图工具(windows+mac)
    让Snipaste帮你提高工作效率Snipaste是一个简单但强大的截图工具,也可以让你将截图贴回到屏幕上!下载并打开Snipaste,按下 F1 来开始截图,再按 F3,截图就在桌面置顶显示了。就这么简单!你还可以将剪贴板里的文字或者颜色信息转化为图片窗口,并且将它们进行缩放、旋转、翻转、设为半......
  • 截图神器-snipaste
    基础操作Snipaste是一个简单但强大的贴图工具,同时也可以执行截屏、标注等功能。截屏开始截图快捷键(默认为 F1)鼠标左键何谓一次 成功的截图保存到剪贴板(  / Ctrl + C / Enter / 双击保存到文件(  / Ctrl + S)保存到贴图(  / Ctrl + T)快速保存(Shift +......
  • Android手机屏幕锁屏监测
    手机屏幕锁屏和解锁都是会发广播出来的,我们只要用BroadcaseReceiver来监听相应的Action即可,必须动态在代码中注册才能够接受到广播。1.publicvoidonCreate(finalBundlesavedInstanceState){2.finalIntentFilterfilter=newIntentFilter();3.filter......
  • Android主流屏幕分辨率介绍
    对于Android游戏开发我们不得不像iPhone那样思考兼容Android平板电脑,苹果要考虑iPad、iPhone3GS和iPhone4等屏幕之间的兼容性,对于开发Android游戏而言也不例外,考虑的机型更多。常规的我们可能只考虑QVGA,HVGA,WVGA,FWVGA和DVGA,但是抛去了手机不谈,可能平板使用类似WSVGA的1024......
  • android中退出当前应用程序的四种…
    Android程序有很多Activity,比如说主窗口A,调用了子窗口B,如果在B中直接finish(),接下里显示的是A。在B中如何关闭整个Android应用程序呢?本人总结了几种比较简单的实现方法。1.DalvikVM的本地方法android.os.Process.killProcess(android.os.Process.myPid())//获取PID......
  • window的shell怎么查看当前用户名
    在Windows的命令行界面下,可以使用%username%的环境变量来获取当前用户名。具体操作步骤如下:打开cmd命令提示符。可以使用Win+R组合键打开运行窗口,输入cmd命令,然后点击“确定”按钮。在命令提示符下输入echo%username%命令。按下回车键,在命令行界面中就可以看到当前登......
  • 网页截图,html2canvas简单示例
     <divid="box"><p>asd4a5s6fa6s5f1asf</p><imgstyle="width:200px"src="xxxxxx.png"/><buttonstyle="width:100px;height:30px"onclick="prtsc()">pr......
  • 数据库还原失败System.Data.SqlClient.SqlError: 无法执行 BACKUP LOG,因为当前没有数
    https://www.shuzhiduo.com/A/1O5EbK6yd7/高版本可以兼容低版本的数据库哎。所以低版本可以直接还原到高版本。过程中提示数据库还原失败System.Data.SqlClient.SqlError:无法执行BACKUPLOG,因为当前没有数据库备份,按照链接中的第二个方法解决了: 在还原的界面中,取消勾选还......
  • Windows中qtcreator怎么将编译路径更改为当前目录?
       像VC那样,将执行文件所在debug或release目录,放置到源文件的当前目录是不错的选择。因为便于查找。   要实现这个将编译路径更改为当前目录功能,其实很简单,只需要在项目属性页的“构建目录”所在的编辑框中输入“./”即可。   此时,会在源文件的当前目录中产生......