public delegate void OnComplete(string errorMessage); // エラーがなく成功すればnull // この関数だけはStartCoroutineで呼ばないと動かない public IEnumerator CoPostScreenshot( System.Action onImageCaptured = null, // 画像が取れた後で呼ぶコールバック(デバグUIを復活させるなど) string message = null, OnComplete onComplete = null, // 完了コールバック(ポップアップを出す、ログを出す、等々) string channel = null, // チャネル名を変更したければここに与える(与えなければdefaultChannel) int waitFrameCount = 0, // デバグUIを消すなどがすぐに済まない場合、ここにフレーム数を指定 bool withAlpha = false, TextureUtil.FileType fileType = TextureUtil.FileType.Png) { var coRet = new CoRetVal <byte[]>(); yield return(TextureUtil.CoGetScreenshot(coRet, withAlpha, waitFrameCount, fileType)); if (onImageCaptured != null) { onImageCaptured(); } if (channel == null) { channel = _defaultChannel; } var now = System.DateTime.Now; string filename = now.ToString("yyyyMMdd_HHmmss"); filename += (fileType == TextureUtil.FileType.Jpeg) ? ".jpg" : ".png"; yield return(CoPostBinary(coRet.value, filename, message, onComplete, channel)); }
public IEnumerator CoPostTextures( IEnumerable <Texture> textures, string message = null, OnComplete onComplete = null, string channel = null, TextureUtil.FileType fileType = TextureUtil.FileType.Png) { var coroutines = new List <IEnumerator>(); string error = ""; // エラーは全部まとめた // 全部1フレでpngファイル生成までやらないといけない Debug.Assert(textures != null); bool first = true; foreach (var texture in textures) { var filename = texture.name; filename += (fileType == TextureUtil.FileType.Jpeg) ? ".jpg" : ".png"; PostTextureInternal( coroutines, error, texture, filename, first ? message : null, channel, fileType); first = false; } // 一気に待ち foreach (var coroutine in coroutines) { while (coroutine.MoveNext()) { yield return(null); } } if (onComplete != null) { onComplete(error); } }
public IEnumerator CoPostTexture( Texture texture, string filename = null, string message = null, OnComplete onComplete = null, string channel = null, TextureUtil.FileType fileType = TextureUtil.FileType.Png) { Debug.Assert(texture != null); if (filename == null) { filename = texture.name; filename += (fileType == TextureUtil.FileType.Jpeg) ? ".jpg" : ".png"; } var coroutines = new List <IEnumerator>(); string error = ""; // エラーは全部まとめた PostTextureInternal( coroutines, error, texture, filename, message, channel, fileType); // 一気に待ち foreach (var coroutine in coroutines) { while (coroutine.MoveNext()) { yield return(null); } } if (onComplete != null) { onComplete(error); } }
// 全ミップレベル一気にファイルイメージを生成してコルーチンをリストに溜める。 void PostTextureInternal( List <IEnumerator> coroutinesOut, string errorAppend, Texture texture, string filename, string message, string channel, TextureUtil.FileType fileType) { var trunc = System.IO.Path.GetFileNameWithoutExtension(filename); var ext = System.IO.Path.GetExtension(filename); //.が入ってる var hasMipmap = TextureUtil.GetMipmapCount(texture) > 1; var bytesList = TextureUtil.ConvertAllLevelToFile(texture, fileType); for (int level = 0; level < bytesList.Length; level++) { var levelFilename = trunc; if (hasMipmap) { levelFilename += "_" + level; } levelFilename += ext; var coPostBinary = CoPostBinary( bytesList[level], levelFilename, (level == 0) ? message : null, // messageは最初だけ onComplete: e => { if (!string.IsNullOrEmpty(e)) { if (!string.IsNullOrEmpty(errorAppend)) { errorAppend += "\n"; } errorAppend += e; } }, channel); coroutinesOut.Add(coPostBinary); } }