zoukankan      html  css  js  c++  java
  • Android截图

    Android截图很好的实现,从文档的发展,查看View有一个接口getDrawingCache(),这个接口可以得到View当调用这个接口的位图图像Bitmap。

    抓取截图View在图像的某一个时刻。它包括addView此View所有的孩子View图像,比方在截取Activity时。图像是不会包括浮如今activity上方的对话框的

    以下的代码是截取图像而且经过http post接口上传到server的样例,截图并上传的核心代码例如以下:

    Screenshot.java

    package com.example.scrmdemo;
    
    import java.io.BufferedReader;
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    import android.app.Activity;
    import android.graphics.Bitmap;
    import android.graphics.Rect;
    import android.graphics.drawable.BitmapDrawable;
    import android.graphics.drawable.Drawable;
    import android.view.View;
    
    public class Screenshot {
    
    	public static Bitmap takeScreenshotForView(View view) {
    		view.setDrawingCacheEnabled(true);
    		view.buildDrawingCache();
    		Bitmap tempBit = view.getDrawingCache();
    		Rect frame = new Rect();
    		view.getWindowVisibleDisplayFrame(frame);
    		int width = view.getWidth();
    		int height = view.getHeight();
    		Bitmap bitmap = Bitmap.createBitmap(tempBit, 0, 0, width, height);
    		view.destroyDrawingCache();
    		return bitmap;
    	}
    
    	public static Bitmap takeScreenshotForActivity(Activity activity) {
    		View view = activity.getWindow().getDecorView();
    		view.setDrawingCacheEnabled(true);
    		view.buildDrawingCache();
    		Bitmap tempBit = view.getDrawingCache();
    		Rect frame = new Rect();
    		view.getWindowVisibleDisplayFrame(frame);
    		int statusBarHeight = frame.top;
    		int width = view.getWidth();
    		int height = view.getHeight();
    		Bitmap bitmap = Bitmap.createBitmap(tempBit, 0, statusBarHeight, width,
    				height - statusBarHeight);
    		view.destroyDrawingCache();
    		return bitmap;
    	}
    
    	public static Drawable BitmapToDrawable(Bitmap bitmap) {
    		@SuppressWarnings("deprecation")
    		BitmapDrawable bd = new BitmapDrawable(bitmap);
    		Drawable drawable = (Drawable) bd;
    		return drawable;
    	}
    
    	public static boolean savePic(Bitmap bitmap, String fileName) {
    		try {
    			File file = new File(fileName);
    			if (!file.getParentFile().exists()) {
    				file.getParentFile().mkdirs();
    			}
    			FileOutputStream fos = null;
    			fos = new FileOutputStream(file);
    			bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
    			fos.flush();
    			fos.close();
    			return true;
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    			return false;
    		} catch (IOException e) {
    			e.printStackTrace();
    			return false;
    		}
    	}
    
    	public static byte[] getBytes(Bitmap bitmap) {
    		ByteArrayOutputStream out = new ByteArrayOutputStream();
    		bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
    		try {
    			out.flush();
    			out.close();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		return out.toByteArray();
    	}
    
    	interface ISharePicCallBack {
    		public final static int SHARE_OK = 1;
    		public final static int SHARE_NOTOK = 2;
    
    		public void shareResult(int resultCode, String output);
    	}
    
    	public static void share(final String urlStr, final Bitmap bitmap,
    			final ISharePicCallBack callBack) {
    		new Thread() {
    			public void run() {
    				try {
    					URL url = new URL(urlStr);
    					HttpURLConnection httpConn = (HttpURLConnection) url
    							.openConnection();
    					httpConn.setDoOutput(true);
    					httpConn.setDoInput(true);
    					httpConn.setUseCaches(false);
    					httpConn.setRequestMethod("POST");
    					byte[] requestStringBytes = getBytes(bitmap);
    					httpConn.setRequestProperty("Content-length", ""
    							+ requestStringBytes.length);
    					httpConn.setRequestProperty("Content-Type",
    							"application/octet-stream");
    					httpConn.setRequestProperty("Connection", "Keep-Alive");
    					httpConn.setRequestProperty("Charset", "UTF-8");
    					OutputStream outputStream = httpConn.getOutputStream();
    					outputStream.write(requestStringBytes);
    					outputStream.flush();
    					outputStream.close();
    					if (HttpURLConnection.HTTP_OK == httpConn.getResponseCode()) {
    						StringBuffer sb = new StringBuffer();
    						String readLine;
    						BufferedReader responseReader;
    						responseReader = new BufferedReader(
    								new InputStreamReader(
    										httpConn.getInputStream(), "UTF-8"));
    						while ((readLine = responseReader.readLine()) != null) {
    							sb.append(readLine).append("
    ");
    						}
    						responseReader.close();
    						callBack.shareResult(ISharePicCallBack.SHARE_OK,
    								sb.toString());
    					} else {
    						callBack.shareResult(ISharePicCallBack.SHARE_NOTOK, ""
    								+ httpConn.getResponseCode());
    					}
    				} catch (IOException e) {
    					callBack.shareResult(ISharePicCallBack.SHARE_NOTOK, "");
    					e.printStackTrace();
    				}
    			};
    		}.start();
    	}
    }
    



    使用本文件时。须要向Androidproject的AndroidManifest.xml配置文件里加入两个权限:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.INTERNET"/>




    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    Python
    Linux, Nginx
    Python
    C#图像处理(各种旋转、改变大小、柔化、锐化、雾化、底片、浮雕、黑白、滤镜效果)
    堆——神奇的优先队列(下)
    堆——神奇的优先队列(上)
    二叉树
    开启“树”之旅
    巧妙的邻接表(数组实现)
    Dijkstra最短路算法
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4621646.html
Copyright © 2011-2022 走看看