出于调试目的将 texture2D 打印到文件或图像

printing a texture2D to file or as image for debugging purposes

我试图弄清楚图像在图像处理操作的几个阶段是如何处理的(它看起来像什么,等等...),所以我写了以下内容 co-routine 来捕获屏幕截图, 但我不确定如何 打印出 在不同阶段拍摄的照片(例如 png 图像

public void CaptureFrame(RectTransform rect)
{
    StartCoroutine( Co_Capture(rect) );
}

private IEnumerator Co_Capture(RectTransform rect)
{
    yield return new WaitForEndOfFrame();

    _texture = new Texture2D( (int)rect.sizeDelta.x, (int)rect.sizeDelta.y );
    _texture.ReadPixels( new Rect( rect.anchoredPosition.x - (rect.sizeDelta.x * 0.5f), rect.anchoredPosition.y - (rect.sizeDelta.y * 0.5f), rect.sizeDelta.x, rect.sizeDelta.y ), 0, 0 );
    _texture.Apply();

    OnImageCaptured( new ScreenShotEventArgs(_texture) );
}

鉴于我将应用程序构建到 Android 设备,理想情况下我希望将图像都保存在某个文件夹中(通过 Unity3D Editor) 以及设备上的 data 文件夹,例如。类似于 Debug.Log 您在不同阶段打印出来的消息,以查看代码的哪些部分已到达,等等...

我有什么选择?什么是 code/command/method 通过 Unity3D 保存 image/picture 以及 Android 平板电脑,以便开发人员可以看到各个阶段或处理的图像?

你在评论部分说得对。您使用 EncodeToPNG() 将其转换为字节数组,然后使用 File.WriteAllBytes 保存它。你没有做对的是路径。

如果您希望它在 Android、iOS 和任何平台上工作,请使用保存到 Application.persistentDataPath。必须将其保存在文件夹中,而不是直接保存到Application.persistentDataPath

所以应该是 Application.persistentDataPath+"/yourfoldername/imagename.png"

同样,这:Application.persistentDataPath+"/imagename.png" 将在 iOS 上失败,因为您正试图直接写入需要我上面提到的文件夹的沙箱。

最后,我注意到您正在使用 + 连接路径。避免这样做,而是使用 Path.Combine.

string tempPath = Path.Combine(Application.persistentDataPath, "yourfoldername");
tempPath = Path.Combine(tempPath, "yourfoldername.png");

这会将纹理保存为 Img1.png 在所有设备上的有效 public 位置。

File.WriteAllBytes(Path.Combine(Application.persistentDataPath + "Img1.png"), _texture.EncodeToPng());