就會直接把畫面存成PNG檔案。
另外一種使用ReadPixels來貯存畫面資料,因為使用第一種方法會先把檔案存下來,要使用的話還必須Load檔案才行,不過若只要單純的擷取圖片使用這個即可。如果想要操弄擷取的畫面又或者是不需要存檔的話,建議可以使用ReadPixels,這個也只要再加上檔案寫入的方法,也同樣可以把圖片存下來。
Code:
public Camera myCamera; IEnumerator Screenshot() { //在擷取畫面之前請等到所有的Camera都Render完 yield return new WaitForEndOfFrame(); Texture2D texture = new Texture2D((int)myCamera.pixelWidth, (int)myCamera.pixelHeight); //擷取全部畫面的資訊 texture.ReadPixels(new Rect(0, 0, (int)myCamera.pixelWidth, (int)myCamera.pixelHeight),0,0, false); texture.Apply(); //自己處理畫面資料的方法 //... }
如果要把讀取的資料存成圖片檔也很簡單,用File I/O把Texture2D的資料寫入檔案即可
void SaveTextureToFile(Texture2D texture, string fileName) { byte[] bytes = texture.EncodeToPNG(); string filePath = Application.dataPath + "/" + fileName + ".png"; using (FileStream fs = File.Open(filePath, FileMode.Create)) { BinaryWriter binary = new BinaryWriter(fs); binary.Write(bytes); } }
5 comments:
你好~想請問一下void SaveTextureToFile(Texture2D texture, string fileName)
這邊的texture跟filename要怎麼給呢?
我想設一個按鈕來執行這個功能,但呼叫時跑出error,所以想請問一下使用方法~~
謝謝您哦!
不知道你的錯誤訊息是什麼呢? 如果你的texture是來自unity專案裡面的物件, 比較有可能的狀況就是該texture沒有設定readable.
您好,我目前的寫法是一開始宣告public Texture2D texture;
然後有一個按鈕的功能是
public void okClick()
{
StartCoroutine (Screenshot ());
SaveTextureToFile (texture, "anwser");
}
得到錯誤訊息是UnassignedReferenceException表示texture沒有被assign...
不過好像在UI物件內沒有texture2D的選項 有嘗試過給它image物件但也不能用
所以不太知道assign什麼給它?
如果你在外面宣告了Texture2D,那你應該會在那個component的inspector看到那個欄位,沒有放東西當然就會出問題, 但我想你應該不是要這麼做, 既然你呼叫了Screenshot(), 那就在我最後的註解(//自己處理畫面資料的方法), 這邊如果還要再對擷取的圖做加工也可以, 沒有的話就直接呼叫SaveTextureToFile(), 把剛剛擷取的texture丟入.
原來是這樣~謝謝
Post a Comment