サイトアイコン Unity+AssetStoreおすすめ情報

Unity:byte配列からjpg/pngをテクスチャ(Texture)に変換

はじめに

Unity で テクスチャ(Texture) を動的に生成する方法はいくつかあります。Resourceに画像を保存して Resources.Load する方法や、Assetsに画像を保存しておきインスペクターで静的に設定する方法など。今回は byte配列 をテクスチャ(Texture) にする方法を紹介します。

Unityを知らない方は、ぜひ こちらの記事 をご参照ください。

ソースコード

以下にソースコードを示します。

ネット上の色々なサンプルを読んでいると、height/width を指定していましたが、私が確認したかりぎ「texture.LoadImage(readBinary);」やったタイミングで、height/widthが自動的に設定されるため自力で計算する意味はあまりないかなと思います。

using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;

public class BytesTextureLoad : MonoBehaviour
{
    void Update ()
    {
        // 3秒に1度切り替える
        if (((int)Time.realtimeSinceStartup / 3) % 2 == 0)
        {
            var texture = ReadTexture("amerika.png");
            GetComponent<Renderer>().material.mainTexture = texture;
        }
        else
        {
            var texture = ReadTexture("nihon.jpg");
            GetComponent<Renderer>().material.mainTexture = texture;
        }
    }

    Texture ReadTexture(string path)
    {
        byte[] readBinary = ReadFile(path);

        Texture2D texture = new Texture2D(1, 1);
        texture.LoadImage(readBinary);

        return texture;
    }

    byte[] ReadFile(string path)
    {
        FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read);
        BinaryReader bin = new BinaryReader(fileStream);
        byte[] values = bin.ReadBytes((int)bin.BaseStream.Length);

        bin.Close();

        return values;
    }
}


モバイルバージョンを終了