文档章节

微信等头像截取的实现

拉风的道长
 拉风的道长
发布于 2012/07/24 10:51
字数 535
阅读 3453
收藏 3

逛论坛看到别人有这个需求,自己也是打酱油,就写了一把。

界面如下:

主要有一个半透明的矩形框,用作截取区域。一个ok按钮,确定截取。一个图片控件,显示图片。

功能需求:
1.多点放大缩小图片;
2.移动图片;
3.提供预览。

我一开始的思路是这样的:
用户放大缩小图片时,记住缩放比例,然后确定时,按照比例来截图。但是有个问题:如何确定是哪块处于半透明框中?因为可以移动图片的。这就不好计算了。

后来想到一个简单的方法:
用户放大或缩小图片之后,点OK时,截取屏幕的截图。然后再计算出半透明矩形框的位置,截图。这样就避免了繁琐的计算来确定截图位置。

实现过程:
1.截取屏幕图像:

// 获取Activity的截屏,this指向一个activity
private Bitmap takeScreenShot()
{
	View view = this.getWindow().getDecorView();
	view.setDrawingCacheEnabled(true);
	view.buildDrawingCache();
	return view.getDrawingCache();
}

2.获取状态栏、标题栏的高度

int statusBarHeight = 0;
int titleBarHeight = 0;

private void getBarHeight()
{
	// 获取状态栏高度
	Rect frame = new Rect();
	this.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
	statusBarHeight = frame.top;
	
	int contenttop = this.getWindow()
			.findViewById(Window.ID_ANDROID_CONTENT).getTop();
	// statusBarHeight是上面所求的状态栏的高度
	titleBarHeight = contenttop - statusBarHeight;
}

3.多点缩放图片

这段代码比较多,我就补贴代码了。看源码http://www.oschina.net/code/snippet_195456_34166吧。

4.创建半透明矩形区域

继承view,自绘。

 

@Override
protected void onDraw(Canvas canvas)
{
	super.onDraw(canvas);
	/*这里就是绘制矩形区域*/
	int width = this.getWidth();
	int height = this.getHeight();
	
	Paint paint = new Paint();
	paint.setColor(0xaa000000);

	//top
	canvas.drawRect(0, 0, width, height/3, paint);
	//left
	canvas.drawRect(0, height/3, (width - height/3)/2, height*2/3, paint);
	//right
	canvas.drawRect((width + height/3)/2, height/3, width ,  height*2/3, paint);
	//bottom
	canvas.drawRect(0, height*2/3, width, height, paint);
}

5. 截取图片

/*获取矩形区域内的截图*/
private Bitmap getBitmap()
{
	getBarHeight();
	Bitmap screenShoot = takeScreenShot();
	
	clipview = (ClipView)this.findViewById(R.id.clipview);
	int width = clipview.getWidth();
	int height = clipview.getHeight();
	Bitmap finalBitmap = Bitmap.createBitmap(screenShoot,
			(width - height / 3) / 2, height / 3 + titleBarHeight + statusBarHeight, height / 3, height / 3);
	return finalBitmap;
}

这些就是技术点了。其他的没有什么的。

重要的是想法。

源代码怎么添加??郁闷了。。。

 

© 著作权归作者所有

拉风的道长
粉丝 55
博文 110
码字总数 55629
作品 0
昌平
程序员
私信 提问
加载中

评论(4)

拉风的道长
拉风的道长 博主

引用来自“舒适1”的评论

这个有保存图片的程序吗?截过得图片用不了啊
保存bitmap。网上有相关的代码
舒适1
舒适1
这个有保存图片的程序吗?截过得图片用不了啊
拉风的道长
拉风的道长 博主

引用来自“876335662”的评论

源码能发一份么?

参看http://www.oschina.net/code/snippet_195456_34166
potential
potential
源码能发一份么?
图片处理工具

Android7.0 完美适配——FileProvider 拍照裁剪全解析 适配 android7.0 中的拍照相册裁剪功能 使用 photoView 实现可点击放大到全屏显示的控件,效果类似于微信朋友圈点开看大图 使用 photoV...

掘金官方
2017/12/11
0
0
Android 高仿微信头像截取 打造不一样的自定义控件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lmj623565791/article/details/39761281 转载请表明出处:http://blog.csdn.net/lmj623565791/article/detai...

鸿洋_
2014/10/10
0
0
基于图像处理操作 QQ 的工具 - foolqq

基于图像处理操作QQ的工具foolqq 目前读写QQ的机器人都是基于爬虫分析smartqq报文来实现的,然而smartqq腾讯已经不再维护,其HTTP服务端经常不可用,且经常需要不定时的重启,foolqq应运而生...

mohuan
2017/10/15
657
2
如何实现微信小程序换头像?三步帮你搞定!

背景 2019年10月1日在祖国70周年大庆之际,微信朋友圈被大家纷纷@微信官方要国旗的景象给刷屏了,在为祖国庆生的同时,玩的不亦乐乎。 在9月25日,我心血来潮决定在国庆前开发一个换头像的微...

快狗打车前端团队
前天
0
0
教你用Python制作微信好友背景墙

目录:0 引言1 环境2 代码实现3 后记 0 引言 前段时间,微信朋友圈开始出现了一种晒照片新形式,微信好友墙,即在一张大图片中展示出自己的所有微信好友的头像。 效果如下图,出于隐私考虑,...

上海小胖
07/17
49
0

没有更多内容

加载失败,请刷新页面

加载更多

华为手机翻译功能怎么使用?这三种方法请务必收藏

华为手机翻译功能怎么使用?在我们的生活中会经常遇到翻译问题,许多外语不好的朋友该怎么办呢?华为手机已经为我们解决了这个问题,今天小编就教大家学会使用华为手机中的三种翻译技巧,需要...

翻译小天才
25分钟前
4
0
企业服务软件开发中需要注意的三个问题

在开发企业服务软件时,我们需要分为:业务需求、用户需求、产品需求,三大需求层次,三个层次互相关联,企业服务软件开发首先要服务业务,需要满足业务的需求,再关注用户体验,也就是用户需...

积木创意科技
28分钟前
4
0
C++容器底层数据结构

内置数组: int arr[10][10];memset(arr,0,10*10*sizeof(int)); //初始化int tmp[10][10];memcpy(arr, tmp, 10 * 10 * sizeof(int));//拷贝 void *memcpy(void *destin, void *source,......

SibylY
28分钟前
3
0
Dubbo-自适应拓展机制

背景 在 Dubbo 中,很多拓展都是通过 SPI 机制进行加载的,比如 Protocol、Cluster、LoadBalance 等,这些都是Dubbo的基础组件。这些基础组件的拓展不是在系统框架启动阶段被加载,而是拓展方...

rock-man
56分钟前
7
0
Kali安装fcitx输入法(五笔)

安装fcitx > sudo apt-get install fcitx-rime fcitx-config-gtk3 重启 > sudo reboot fcitx配置 效果就是这样 配置输入法切换 系统设置...

yeahlife
58分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部