示例#1
0
        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));
        }
示例#2
0
        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);
            }
        }
示例#3
0
        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);
            }
        }
示例#4
0
        // 全ミップレベル一気にファイルイメージを生成してコルーチンをリストに溜める。
        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);
            }
        }