如何通过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#图像处理库,例如ImageSharp或search it on GitHub.
如果第三方库的性能或大小仍然不够好,最后一种解决方案是自己编写.
我可以提出两个想法:
>将可能冗长的读取和调整大小的过程分成多个Coroutines
.
>使用多线程
您也可以尝试calling java functions from Unity3D.但是我对此并不熟悉.
标签:image,unity3d,thumbnails,c,android 来源: https://codeday.me/bug/20191111/2020760.html