unity 调用安卓系统摄像机和相册并对图片进行裁剪(一)

        这是本人从事这个行业以来的第一篇技术博客,一直以来,都是需要什么直接从网上找现成的。但是最近遇到的问题,使我感慨颇多,需求如标题所言,从网上找出来的基本都是雨凇momo的,其他也都是做的微调。但是在做了一些抄袭的尝试后,最终放弃。

        作为项目组客户端的主城,一直在抄别人的东西,总感觉有些不上档次,正好借此机会,从安卓开发入手,自己实现如题所示功能。

        在进入正题前,先阐述一下对这个问题的个人观点:

        本人并不赞成在unity游戏中使用自定义头像的需求。但是,策划有需求,我就要实现...

        下面进入正题,这个问题,分两篇进行讲述。第一篇实现在eclipse中建立一个安卓项目并直接调用系统相机和相册。第二篇实现这个项目与unity的交互。


首先安装java环境和eclipse,一定要安装ADT。这些准备工作直接从网上找就好了,这里不再赘述。

新建一个安卓工程,包名要和unity项目的包名一致MinimumRequiredSDK最低版本不要设置的太低,建议在4.0及以上(否则会出现unity打包时的资源错误)。

搭建如下界面:

包含一个textView,一个imageView,两个button,textView是用来输出信息用的(之前并不会android,所以只能用这种简单粗暴的方式打印输出信息...),imageView用来显示要最终使用和上传的图片,连个button如图所示。

unity 调用安卓系统摄像机和相册并对图片进行裁剪(一)_第1张图片


在MainActivity.java的onCreate()方法中的代码如下

unity 调用安卓系统摄像机和相册并对图片进行裁剪(一)_第2张图片

主要是设置两个Button的点击事件。

button1的点击事件如下:

unity 调用安卓系统摄像机和相册并对图片进行裁剪(一)_第3张图片

这个是打开系统相机,其中

intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUrl);

作用是让摄像机拍摄完成后直接保存图片到imageUrl,网上搜到的好多都是通过返回数据返回图片,然后再自己进行保存的,比较坑。

下一行

startActivityForResult(intent, openCamera);

作用是打开系统像机的实例。第二个参数请求码是为了在onActivityResult()方法中做区分用的,之后会说到。


然后是button2的点击事件:

unity 调用安卓系统摄像机和相册并对图片进行裁剪(一)_第4张图片

这个方法调用系统相册,并且通过参数设置裁剪信息,选中图片后,可以直接进行裁剪。具体参数的含义自己看一下就好了。


然后就是返回方法的处理了,onActivityResult()方法是与startActivityForResult()方法对应的。其中包含了返回参数和数据。刚开始做这个功能的时候,网上资料是从data中提取相机返回的图片,但是后来发现,这个图片是个缩略图,并不是原图..unity 调用安卓系统摄像机和相册并对图片进行裁剪(一)_第5张图片

因为在这个例子中,我们打开相册时直接设置了裁剪,但相机的返回时未进行裁剪的,所以需要根据请求码来区分是不是相机的返回,再调用裁剪工具。


裁剪工具的调用如下:


unity 调用安卓系统摄像机和相册并对图片进行裁剪(一)_第6张图片


本来也想通过参数传递,在相机拍摄完成之后直接调用裁剪的,但是尝试了一下没有成功。网上搜了一下有人说是不支持的,就没再尝试,但我觉得这个应该是可以的。

在这个例子中是没有用到其他权限的,所以不需要单独添加权限。

运行结果如下。


unity 调用安卓系统摄像机和相册并对图片进行裁剪(一)_第7张图片


鉴于网上到处都是粘贴的别人的代码,本人决定都用图片。为了改变这种原模原样抄袭的风气...

如有疑问可以加我QQ:1009570451

Hello 光头原创

欢迎转载。



你可能感兴趣的:(unity,android)