将View的内容保存为图片

	private void saveImg(View v, String name) {
		Bitmap bitmap = getBitmap(v);
		ByteArrayOutputStream stream = new ByteArrayOutputStream();
		bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
		File file = new File(name);
		if (file.exists()) {
			file.delete();
		} else {
			try {
				file.createNewFile();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		FileOutputStream fos = null;
		try {
			fos = new FileOutputStream(file);
			fos.write(stream.toByteArray());
			fos.close();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (fos != null) {
				try {
					fos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

	private Bitmap getBitmap(View v) {
		Bitmap bitmap = Bitmap.createBitmap(v.getWidth(), v.getHeight(),
				Bitmap.Config.ARGB_8888);
		Canvas canvas = new Canvas(bitmap);
		v.draw(canvas);
		return bitmap;
	}

	@Override
	public void onClick(View arg0) {
		saveImg(iv, Environment.getExternalStorageDirectory().getPath()
				+ File.separatorChar + "view.png");
	}


总结:这里需要知道如何获取View上内容,使用Canvas将View的内容绘制到Bitmap上,然后的操作就是将Bitmap转化为byte写到文件中就可以了。


注意:当相关的权限都加入的时候,图片的路径要写对,下面的这种写法就报错了。

@Override
	public void onClick(View arg0) {
		saveImg(iv, Environment.getExternalStorageDirectory().getPath()
				+ "view.png");
	}

将View的内容保存为图片_第1张图片

其实本质上是因为上面的路径少了分隔符,写成这样子就可以了,

saveImg(iv, Environment.getExternalStorageDirectory().getPath()
				+ File.separatorChar + "view.png");


你可能感兴趣的:(将View的内容保存为图片)