2017-07-04 105 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());