Unity 从文件夹加载媒体并显示在 RawImage 上
Unity load medias from folder and display on RawImage
我正在尝试在 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 () {
}
}
谢谢:)
First I am trying to get it to work with just images.
I'm very new with Unity and not good with C#. I'm able to get all
media file sources (images) to an array but next I need to convert
them to a texture and place on the RawImage -component. I'm stuck with
this part.
您正在查找 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];
我正在尝试在 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 () {
}
}
谢谢:)
First I am trying to get it to work with just images.
I'm very new with Unity and not good with C#. I'm able to get all media file sources (images) to an array but next I need to convert them to a texture and place on the RawImage -component. I'm stuck with this part.
您正在查找 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];