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

在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中添加这句权限当程序运行到上面那段代码是会强行闪退,我当时在写的时候就踩到这个坑,特意再次声明

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