2016-05-05 4 views
1

Вот мой код:Unity Texture2D.ReadPixels() производит серую текстуру

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(); 

Проблема заключается в том, что после этого кода я остался с пустым текстурой, которая является однородным серым, когда я пытаюсь использовать его в GUI или просмотреть его в инспекторе. Странно, что созданный файл правильный.

+0

Можете ли вы предоставить код с применением текстуры на элементах пользовательского интерфейса? –

+0

Я бы поверила, что это проблема, если бы не тот факт, что если я создаю текстуру публично, я могу сказать, что она серая в инспекторе, и если я удаляю текстуру во время ее запуска, она отображается. GUI.DrawTexture (новый Rect (курсор, GUIConstanst.flatRect), sigTexture, ScaleMode.ScaleToFit); – s1ni5t3r

+0

Если ниже ответ помог, пожалуйста, подумайте о том, чтобы пометить ответ. Спасибо –

ответ

4

Попробуйте это. Ive добавил texture.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

Большое спасибо. Это сводило меня с ума. Теперь я смотрю на документы для Apply(), все это имеет смысл. Текстура в обычной памяти обновлялась так, что работала .EncodeToPNG(), но она не перемещалась в память графического процессора. – s1ni5t3r