编程语言
首页 > 编程语言> > 如何通过C#代码在Android的Unity3D中创建图像缩略图?

如何通过C#代码在Android的Unity3D中创建图像缩略图?

作者:互联网

我在Unity中有一些C#代码,可以从Android设备的文件系统中获取大图像,现在我想用它来创建一个小缩略图.

我发现了很多不同的建议,例如:

MemoryStream outputStream = new MemoryStream();
System.Drawing.Image image = System.Drawing.Image.FromFile(originalImagePath);
System.Drawing.Image thumbnail = image.GetThumbnailImage(thumbnailWidth, thumbnailHeight,()=>false, IntPtr.Zero);
thumbnail.Save(outputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
return outputStream;

但是,与上述方法一样,我发现的所有方法都要求您使用System.Drawing命名空间.而且,我一生都无法获得此命名空间中的函数在Android上正常工作,因为即使在向Assets文件夹中添加“ System.Drawing.dll”后,我仍然收到一条错误消息,指出无法找到“ gdiplus” .dll”在“ System.Drawing.Image”的构造上.我尝试下载并将“ gdiplus.dll”添加到Assets,但是我却得到了相同的错误,好像找不到它一样!

我不明白为什么很难在Unity中使用System.Drawing函数,但这有点不重要,因为我真正想做的就是创建一个驻留在用户Android设备上的图像的缩略图.欢迎大家提出意见!

编辑:我忘了提一下,我想避免使用Texture2D的解决方案,因为它们无法在主线程上运行,因此会带来性能后果=(

提前致谢! =)

解决方法:

不要使用Texture2D.Resize,因为生成的纹理将变为灰色:

After resizing, texture pixels will be undefined.

其他解决方案请参见this post.

旧答案

我建议使用开源C#图像处理库,例如ImageSharpsearch it on GitHub.

如果第三方库的性能或大小仍然不够好,最后一种解决方案是自己编写.

我可以提出两个想法:

>将可能冗长的读取和调整大小的过程分成多个Coroutines.
>使用多线程

您也可以尝试calling java functions from Unity3D.但是我对此并不熟悉.

标签:image,unity3d,thumbnails,c,android
来源: https://codeday.me/bug/20191111/2020760.html