在Unity3中将videoplayer.texture转换为texture2D

时间:2017-12-26 05:55:29

标签: c# unity3d textures texture2d

我有这个小代码片段

void Update() {
        if (Input.GetMouseButtonDown(0)) {
            if (videoPlayer.isPlaying) {
                Texture2D currentFrame = videoPlayer.texture as Texture2D;
                videoPlayer.Stop();
                string destPath = Path.Combine (Application.streamingAssetsPath, "dnn/ClickedFrame.png");
                Debug.Log("destPath :"+ destPath);
                if (currentFrame != null)
                {
                    File.WriteAllBytes(destPath, currentFrame.EncodeToPNG());
                }
                else {
                    Debug.Log("Current Frame is null");
                }
            }  
        }       
    }

我想获得当前的视频帧纹理,并希望保存在磁盘上。但每次它说当前帧是空的。我猜铸造有问题。如何将纹理转换为texture2d并保存在磁盘上?

更新

我找到了一种方法来完成这项工作

convertedTex2D = new Texture2D(videoPlayer.texture.width, videoPlayer.texture.height, TextureFormat.ARGB32, false);
            convertedTex2D.ReadPixels(new Rect(0, 0, videoPlayer.texture.width, videoPlayer.texture.height), 0, 0);
            convertedTex2D.Apply();

它的工作正常和convertig纹理到texture2d但有时我得到这个错误。试图解决它。

  

调用ReadPixels来读取系统帧缓冲区中的像素   不在画框内。 UnityEngine.Texture2D:ReadPixels(矩形,   Int32,Int32)VideoPlayerManager:Update()(at   资产/ VideoPlayerManager.cs:40)

     

[d3d11]尝试在RenderTexture边界之外的ReadPixels!   阅读(0,0,1920,1088)(656,595)

有关错误的一些信息 我查了一下:

  1. 纹理宽度= 1920,纹理高度1088
  2. 屏幕宽度= 803,屏幕高度为557
  3. 当我使用scree宽度和高度时,这是正常工作,但我不想使用它。

0 个答案:

没有答案