Вместо использования GetRawTextureData()
и LoadRawTextureData
вы должны сохранить его в формате .png
или .jpg
! «RawTextureData» очень велика по сравнению с чистыми данными .jpg
или .png
.
Вместо этого используйте EncodeToPNG
(или EncodeToJPG
, если качество не так важно - чем не забывать также принимать окончание файла) и LoadImage
.
Кроме того, LoadImage
фактически «знает» размер изображения (потому что оно закодировано в файл png
или jpg
), поэтому вам вообще не нужен ваш файл iconinfo
!
что-то вроде
// ...
Icon = Sprite.Create(texture2dd, new Rect(0.0f, 0.0f, texture2dd.width, texture2dd.height), Vector2.one * 0.5f, 100.0f);
byte[] texturebytes = Icon.texture.EncodeToPNG();
File.WriteAllText(Application.persistentDataPath + "/icon.png", Encoding.Default.GetString(texturebytes));
// ...
(возможно, также проверьте этот ответ для других способов записи файла.)
и
// ...
byte[] bytesIcon = Encoding.Default.GetBytes(File.ReadAllText(path));
// as the example in the documentation states:
// Texture size does not matter, since
// LoadImage will replace it with incoming image size.
Texture2D iconText = new Texture2D(2, 2);
iconText.LoadImage(bytesIcon);
// Also from the documentation:
// Texture will be uploaded to the GPU automatically; there's no need to call Apply.
return Sprite.Create(iconText, new Rect(0, 0, iconText.width, iconText.height), Vector2.one * 0.5f);
И да, еще одна проблема может заключаться в том, что вы использовали Encoding.Default
(см. здесь ), поэтому, возможно, вам также следует использовать фиксированную кодировку, например Encoding.UTF8
.
Хотя для загрузки файла я бы предпочел использовать UnityWebRequest
, который также можно использовать для файла из локального хранилища файлов!