我有这个小代码片段
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)
有关错误的一些信息 我查了一下:
当我使用scree宽度和高度时,这是正常工作,但我不想使用它。