Маленькая картинка при загрузке её из файла.

Общие вопросы о Unity3D

Маленькая картинка при загрузке её из файла.

Сообщение EIvanov 09 окт 2022, 22:03

Вот рабочий код, который можно найти на многих сайтах (в том числе на офф форуме юнити).
С помощью этого кода можно загрузить картинку из файла в объект с Sprite Renderer.
Проблема в том, что картинка отображается буквально точкой на экране - 1 или 2 пикселя.
Как это исправить?


Код скрипта
Синтаксис:
Используется csharp
public class LoadImage : MonoBehaviour
{
string filePath;// it is as "D:/Unity/Photo-Voodoo/FotoTest/img1.jpg"
public byte[] fileData; // load data inside a byte array 0x89,0x50,0x4E,0x47,0x0D...
 

void Start ()
{

var _image = GameObject.Find("Image200x200onCanvas");  
var _spriteRenderer = _image.GetComponent<SpriteRenderer>();
filePath = @"C:\TEMP\test.jpg";   // Путь к картинке.

fileData = File.ReadAllBytes(filePath);      // 1.read the bytes array
Texture2D tex = new Texture2D(2, 2); // 2.create a texture named tex
tex.LoadImage(fileData);     // 3.load inside tx the bytes and use the correct image size
Rect rec = new Rect(0, 0, tex.width, tex.height);    // 4.create a rect using the textute dimensions
Sprite spriteToUse = Sprite.Create(tex,rec,new Vector2(0.5f,0.5f),100); //5. convert the texture in sprite
_spriteRenderer.sprite = spriteToUse; //6.load the sprite used by UI Image

}
}
 


Сцена
Изображение

Результат
Изображение
EIvanov
UNIт
 
Сообщения: 103
Зарегистрирован: 05 июл 2021, 17:23

Re: Маленькая картинка при загрузке её из файла.

Сообщение Saltant 10 окт 2022, 03:41

Ты в коде указываешь размер текстуры 2х2 пикселя.
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Адепт
 
Сообщения: 2236
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
  • Сайт

Re: Маленькая картинка при загрузке её из файла.

Сообщение EIvanov 10 окт 2022, 05:01

Ты в коде указываешь размер текстуры 2х2 пикселя.

Попробовал изменить - всё равно то же самое.
Кстати, этот размер менять не нужно
// Create a texture. Texture size does not matter, since
// LoadImage will replace with with incoming image size.
https://docs.unity3d.com/530/Documentat ... Image.html
EIvanov
UNIт
 
Сообщения: 103
Зарегистрирован: 05 июл 2021, 17:23

Re: Маленькая картинка при загрузке её из файла.

Сообщение Alkos26Rus 10 окт 2022, 12:24

Sprite.Create(tex,rec,new Vector2(0.5f,0.5f),100);

Последнее значение пробовал менять, это сколько пикселей в единице, вобще если в редакторе накинуть спрайт то он нормально отображается?
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1642
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Маленькая картинка при загрузке её из файла.

Сообщение Tolking 10 окт 2022, 12:42

SpriteRenderer на Image замени....
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2718
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Маленькая картинка при загрузке её из файла.

Сообщение EIvanov 10 окт 2022, 12:44

Пересмотрев кучу видео - разобрался.
Вот рабочий код.

Для загрузки картинки из файла нужно:
1) Поместить картинку на Canvas (добавлять дополнительные компоненты типа SpriteRenderer к картинке не нужно).
2) Вызвать скрипт.

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; //  Пространство имен для UI
using System.IO; // Пространство имен для File.ReadAllBytes

public class LoadImage : MonoBehaviour
{
string filePath = @"C:\TEMP\test.jpg";  // Путь к файлу.


void Start ()
{
if (File.Exists(filePath))
{

GameObject imageObject = GameObject.Find("Image300x300onCanvas");  // Получаем ссылку на объект.
Image _image = imageObject.GetComponent<Image>(); // Получаем ссылку на компонент Image.
byte[] textureBytes = File.ReadAllBytes(filePath); // Загружаем картинку в виде массива байт.
Texture2D _texture = new Texture2D(0, 0); // Создаем новую текстуру. Её размер тут не важен (0, 0) т.к. LoadImage ниже автоматически установит её исходный размер.
_texture.LoadImage(textureBytes);
_image.sprite = Sprite.Create(_texture, new Rect(0, 0, _texture.width, _texture.height), Vector2.zero); // Отображаем картинку

// Если нужно, можно установить оригинальный размер картинки.
// Без этой опции картинка будет масштабироваться под размер Image на форме, с этой опцией будет принимать исходный размер.
//_image.SetNativeSize();

}
}
}
EIvanov
UNIт
 
Сообщения: 103
Зарегистрирован: 05 июл 2021, 17:23


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: GoGo.Ru [Bot] и гости: 19