android 实现截图和图片裁剪

阅读: 评论:0

android 实现截图和图片裁剪

android 实现截图和图片裁剪

我们可以通过view的 RootView();得到包含这个view的最顶层(最外层)的view布局

View rootView = RootView();rootView.setDrawingCacheEnabled(true);rootView.buildDrawingCache();Bitmap bitmap = DrawingCache();
这样我们就得到了刚才我们截图的内容了,当然这样的截图方法只适合在本应用已经跑起来的情况下

而且这个方法实现的截图还有一点需要注意的是,屏幕上方的信号 时间 电池那些东西是无法获取到的,而且截图留下来的文件也显示是空白,然后我们需要对这个文件进行

裁剪


public static Bitmap ImageCrop(Bitmap bitmap) {int w = Width(); // 得到图片的宽,高int h = Height();//下面这句是关键ateBitmap(bitmap, 0, 40, w, h-40, null, false);}

这样就会把上面的那40个像素给干掉


也许我们还需要把该图像存储到文件中

FileOutputStream outputStream = new FileOutputStream(filename);bitmappress(Bitmap.CompressFormat.PNG, 100, outputStream);
这个写入需要添加权限<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
这样文件就保存在自己指定的路径下了


我自己的demo

ample.handlescreen;


import java.io.FileNotFoundException;
import java.io.FileOutputStream;
SimpleDateFormat;
import java.util.Date;
import java.util.Locale;


import android.app.Activity;
aphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;


public class Main extends Activity {


// 这个截图就是传入一个view参数,获取这个view的rootview
// 然后rootview getDrawingCache就会得到一个当前屏幕的截图bitmap
// 也可以对这个bitmap进行文件的存储,通过流的方式
// 记得要写sd卡的读写权限
private Button handleButton;
private ImageView screen;


@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
Create(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
initView();
}


private void initView() {
// TODO Auto-generated method stub
handleButton = (Button) findViewById(R.id.btn_handle);
screen = (ImageView) findViewById(R.id.iv_resouce);


handleButton.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View v) {
// TODO Auto-generated method stub
handleScrenPath(v);
}
});
}


/**

* @param view
*            传入需要截图的那个控件,函数会获取到父界面,进行截图保存
* @return
*/
public String handleScrenPath(View view) {
String path = "";


SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss", Locale.US);
// 定义一个文件的路径,包含文件名
String filename = "/sdcard/" + sdf.format(new Date()) + ".png";
View rootView = RootView();
rootView.setDrawingCacheEnabled(true);
rootView.buildDrawingCache();


Bitmap bitmap = DrawingCache();
screen.setImageBitmap(ImageCrop(bitmap));
if (bitmap != null) {
Toast.makeText(Main.this, "截图已经获取到", Toast.LENGTH_SHORT).show();


try {
FileOutputStream outputStream = new FileOutputStream(filename);
bitmappress(Bitmap.CompressFormat.PNG, 100, outputStream);
Toast.makeText(Main.this, "截图已经成功保存", Toast.LENGTH_SHORT)
.show();


} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


} else {
Toast.makeText(Main.this, "截图已经获取到", Toast.LENGTH_SHORT).show();
}
return path;
}


/**
* 因为上面的截图方法会有上面的电池栏的空白,所以我们需要裁剪一下 按正方形裁切图片
*/
public static Bitmap ImageCrop(Bitmap bitmap) {
int w = Width(); // 得到图片的宽,高
int h = Height();


System.out.println(w + ":" + h);
// int wh = w > h ? h : w;// 裁切后所取的正方形区域边长


// int retX = w > h ? (w - h) / 2 : 0;//基于原图,取正方形左上角x坐标
// int retY = w > h ? 0 : (h - w) / 2;


int retX = w > h ? (w - h) / 2 : 0;// 基于原图,取正方形左上角x坐标
int retY = w > h ? 0 : (h - w) / 2;
// 下面这句是关键
ateBitmap(bitmap, 0, 40, w, h - 100, null, false);
}
}



本文发布于:2024-02-01 00:00:56,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170671685932350.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:截图   图片   android
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23