Android读取Unity纹理,如何通过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.

旧答案

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

我可以提出两个想法:

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

>使用多线程

标签:image,unity3d,thumbnails,c,android

来源: https://codeday.me/bug/20191111/2020760.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值