unity自定义屏幕区域截图并保存在手机上(Android 、IOS)

      由于工作需要在游戏内截屏,就开始在网上找截图方法,有很多种,我为了自己以后的方便,也顺便再次熟悉一下流程,将自己的流程写出来以供自己以后查阅。

在unity中也有自己的截图方法Application.CaptureScreenshot("图片名+图片格式"); 不过该方法是截取的全屏,存放在工程目录中

好了,我们会到正题,自定义截图。

首先我们需要创建一张图片

Texture2D t = new Texture2D(capwidth, capheight, TextureFormat.RGB24, true);

方法中4个参数分别为图片的  宽 高  图片样式 后面一个目前不清楚不过本人实测不论填写true 还是false都 一样,望知道的指点一二。图片创建完成开始截取图片。

     t.ReadPixels(new Rect(pointx pointy, capwidth, capheight), 0, 0, false);

pointx,pointy为一个坐标,截图区域左下角为原点开始截取,也就是说改坐标点为图片的左下角。

 t.Apply();

设置完成后别忘记调用保存的方法。到此步表示图片已经截取完成了下面开始保存图片到我们的手机上

 //保存图片 判断我们是属于哪个平台

   //将图片转为Png格式或者jpg格式并转为二进制

byte[] byt = t.EncodeToPNG();  EncodeToJPG()

  string fileName ="测试.jpg",mpath ="";
            if (Application.platform == RuntimePlatform.Android)
            {
              //  "安卓平台"  
                string destination = "/sdcard/Pictures";
                //判断目录是否存在,不存在则会创建目录  
                if (!Directory.Exists(destination))
                {
                    Directory.CreateDirectory(destination);
                }
                 mpath = destination + "/" + fileName;
                //报存图片  
                File.WriteAllBytes(mpath, byt);
            }
            else if (Application.platform ==RuntimePlatform.IPhonePlayer)
            {
             //"苹果平台"
                string destination = Application.persistentDataPath;
                if (!Directory.Exists(destination))
                {
                  //"没有文件夹,创建文件夹"
                    Directory.CreateDirectory(destination);
                }
                mpath = destination + "/" + fileName;
                //报存图片  
                File.WriteAllBytes(mpath, byt);
            }
            else
            {
                File.WriteAllBytes(Application.dataPath + fileName, byt);
            }

好了到这一步我们就已经把图片保存在手机上面了但是还没完哦 !只是c#代码写完了接下来我们要通过java代码来刷新一下手机上的资源库 unity和安卓的通信这里就不说了直接上java代码

 public void Refresh(String filePath)
    {
          Log.i("Unity", "------------刷新相册");    
         
          Intent scanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
          scanIntent.setData(Uri.fromFile(new java.io.File(filePath)));//
          mActivity.sendBroadcast(scanIntent);  //  
    }

接收自unity中传过来的图片路径  mActivity  为this ,到这一步就表示安卓平台已经完成了 。

接下来看一看 Ios平台 ,说真的ios比安卓就麻烦 一点了

  extern void Refresh_IOS(char *readAddr)
    {
        NSString *strReadAddr = [NSString stringWithUTF8String:readAddr];
        UIImage *img = [UIImage imageWithContentsOfFile:strReadAddr];
        OpenPhotoController *viwe =[OpenPhotoController GetInstance];
        UIImageWriteToSavedPhotosAlbum(img, viwe,
                                       @selector(imageSaved:didFinishSavingWithError:contextInfo:), nil);
    }

接下来需要在info.plist表中添加权限

string AddPhoto=@"<key>NSPhotoLibraryAddUsageDescription</key> <string>XX需要给您添加一张照片</string>";

没有在Xcode中添加这句权限当程序运行到上面那段代码是会强行闪退,我当时在写的时候就踩到这个坑,特意再次声明

到这就保存图片结束了。如有不对的地方请指正!

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值