【问题标题】:Unity load medias from folder and display on RawImageUnity 从文件夹加载媒体并在 RawImage 上显示
【发布时间】:2017-07-26 04:50:56
【问题描述】:

我正在尝试在 Unity 中创建一个媒体播放器,它从静态文件夹中读取所有媒体文件并通过所有媒体播放(图像静态持续时间、视频长度的视频)。首先,我试图让它只处理图像。

我是 Unity 的新手,不擅长 C#。我能够将所有媒体文件源(图像)获取到一个数组中,但接下来我需要将它们转换为纹理并放置在 RawImage 组件上。我被这部分卡住了。

如果我有 src(例如 C:\medias\img1.jpg),那么如何将它作为图像放置在 RawImage 组件上?

我的代码 ->

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEditor;
using System;
using System.IO;
using System.Linq;

public class Player : MonoBehaviour {

    // Use this for initialization
    void Start () {
        DirectoryInfo dir = new DirectoryInfo(@"C:\medias");
        string[] extensions = new[] { ".jpg", ".JPG", ".jpeg", ".JPEG", ".png", ".PNG", ".ogg", ".OGG" };
        FileInfo[] info = dir.GetFiles().Where(f => extensions.Contains(f.Extension.ToLower())).ToArray();
        Debug.Log (info[0]);
        // Logs C:\medias\img1.jpg
    }

    // Update is called once per frame
    void Update () {

    }
}

谢谢:)

【问题讨论】:

    标签: c# image unity3d resources media-player


    【解决方案1】:

    首先我试图让它只处理图像。

    我是 Unity 的新手,不擅长 C#。我能够得到所有 媒体文件源(图像)到一个数组,但接下来我需要转换 将它们添加到纹理并放置在 RawImage 组件上。我被困住了 这部分。

    您正在寻找Texture2D.LoadImage 函数。它将图像字节转换为 Texture2D,然后您可以将该 Texture2D 分配给 RawImage。

    您必须提出有关如何使用视频执行此操作的新问题。这要复杂得多。

    public RawImage rawImage;
    Texture2D[] textures = null;
    
    //Search for files
    DirectoryInfo dir = new DirectoryInfo(@"C:\medias");
    string[] extensions = new[] { ".jpg", ".JPG", ".jpeg", ".JPEG", ".png", ".PNG", ".ogg", ".OGG" };
    FileInfo[] info = dir.GetFiles().Where(f => extensions.Contains(f.Extension.ToLower())).ToArray();
    
    //Init Array
    textures = new Texture2D[info.Length];
    
    
    for (int i = 0; i < info.Length; i++)
    {
        MemoryStream dest = new MemoryStream();
    
        //Read from each Image File
        using (Stream source = info[i].OpenRead())
        {
            byte[] buffer = new byte[2048];
            int bytesRead;
            while ((bytesRead = source.Read(buffer, 0, buffer.Length)) > 0)
            {
                dest.Write(buffer, 0, bytesRead);
            }
        }
    
        byte[] imageBytes = dest.ToArray();
    
        //Create new Texture2D
        Texture2D tempTexture = new Texture2D(2, 2);
    
        //Load the Image Byte to Texture2D
        tempTexture.LoadImage(imageBytes);
    
        //Put the Texture2D to the Array
        textures[i] = tempTexture;
    }
    
    //Load to Rawmage?
    rawImage.texture = textures[0];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-09
      • 2023-03-23
      • 2016-11-13
      • 1970-01-01
      • 2017-07-19
      • 1970-01-01
      相关资源
      最近更新 更多