由于工作需要在游戏内截屏,就开始在网上找截图方法,有很多种,我为了自己以后的方便,也顺便再次熟悉一下流程,将自己的流程写出来以供自己以后查阅。
在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中添加这句权限当程序运行到上面那段代码是会强行闪退,我当时在写的时候就踩到这个坑,特意再次声明
到这就保存图片结束了。如有不对的地方请指正!