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"/>




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

原文地址:https://www.cnblogs.com/blfshiye/p/4621646.html