2017-07-04 98 views
0

我想弄清楚在图像处理操作的几个阶段如何处理图像(它看起来像是什么等),所以我写了以下内容co-routine捕捉截图,但我不知道如何打印出来将拍摄的照片,在不同阶段(例如,作为PNG图像将texture2D打印到文件或作为图像进行调试

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编辑器)以及例如在其设备data文件夹中。类似于Debug.Log消息,您可以在不同阶段打印出来以查看代码的哪些部分已达到,等等。

我有什么选择?什么是通过Unity3D以及Android平板电脑保存图像/图片的代码/命令/方法,以便开发人员可以在各个阶段或处理过程中看到图像?

+2

标题和正文都混淆。打印图像?对我来说,它看起来像你想截图然后保存它,然后加载它。是这样吗? – Programmer

+0

@程序员确实。我想我应该使用'byte [] debugImage1 = _texture.EncodeToPNG();'然后'File.WriteAllBytes(Application.dataPath +“/../Img1.png”,debugImage1);'你会同意吗?有更好的选择吗?基本上,我试图在识别文本之前看到Tesseract对图像的作用,所以我需要看到苔丝各种图像处理步骤的结果。 – Joshua

回答

1

你在评论部分有一些权利。您使用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"); 
1

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

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