2016-05-05 18 views
1

mein Code Hier produzieren:Unity Texture2D.ReadPixels() graue Textur

sigTex = new Texture2D ((int)dims.x, (int)dims.y); 

sigTex.ReadPixels (new Rect (new Vector2(0.0f, Screen.height - bot) , dims), 0, 0); 

byte[] pngBytes = sigTex.EncodeToPNG(); 

System.IO.BinaryWriter bw= new System.IO.BinaryWriter(new System.IO.FileStream(filename, System.IO.FileMode.Create)); 
bw.Write (pngBytes, 0, pngBytes.Length); 
bw.Close(); 

Das Problem ist, dass nach diesem Code, den ich mit einer leeren Textur links bin, dass ein einheitliches Grau ist, wenn ich versuche, es zu benutzen in GUI oder sehen Sie es im Inspektor. Das Merkwürdige ist, dass die erzeugte Datei korrekt ist.

+0

Können Sie den Code mit der Anwendung der Textur auf den UI-Elemente? –

+0

Ich würde glauben, dass dies das Problem ist, wenn es nicht für die Tatsache wäre, dass, wenn ich die Textur öffentlich mache, ich es im Inspektor grau sehen kann, und wenn ich eine Textur im Laufen lasse, wird es angezeigt. GUI.DrawTexture (neues Rect (Cursor, GUIConstanst.flatRect), sigTexture, ScaleMode.ScaleToFit); – s1ni5t3r

+0

Wenn die folgende Antwort hilfreich ist, beachten Sie bitte die Antwort. Danke –

Antwort

4

Versuchen Sie es. Ich habe Textur hinzugefügt.Apply();

http://docs.unity3d.com/ScriptReference/Texture2D.Apply.html

sigTex = new Texture2D ((int)dims.x, (int)dims.y); 

sigTex.ReadPixels (new Rect (new Vector2(0.0f, Screen.height - bot) , dims), 0, 0); 

sigTex.Apply(); 

byte[] pngBytes = sigTex.EncodeToPNG(); 

System.IO.BinaryWriter bw= new System.IO.BinaryWriter(new System.IO.FileStream(filename, System.IO.FileMode.Create)); 
bw.Write (pngBytes, 0, pngBytes.Length); 
bw.Close(); 
+0

Vielen Dank. Das hat mich verrückt gemacht. Jetzt schaue ich mir die Docs für Apply() an, alles macht Sinn. Die Textur im normalen Speicher wurde aktualisiert, sodass .EncodeToPNG() funktionierte, aber nicht in den GPU-Speicher verschoben wurde. – s1ni5t3r