gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:45:37 25 4
gpt4 key购买 nike

我在 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 上运行,因为即使在将“System.Drawing.dll”添加到 Assets 文件夹后,我也会收到一条错误消息,提示它无法找到“gdiplus” .dll”构建“System.Drawing.Image”。我尝试下载并添加所说的“gdiplus.dll”到 Assets,但我得到了同样的错误,就好像找不到它一样!

我不明白为什么让 System.Drawing 函数在 Unity 中工作如此困难,但这有点离题,因为我真正想做的是创建一个图像的缩略图,该图像存在于用户的 Android 上设备。欢迎提出任何建议!

编辑:我忘了提到我想避免使用 Texture2D 的解决方案,因为它们不能脱离主线程运行,因此会带来性能后果 =(

提前致谢! =)

最佳答案

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

After resizing, texture pixels will be undefined.

参见 this post用于其他解决方案。

旧答案

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

最后一个解决方案是自己写一个,如果 3rd 方库的性能或大小仍然不够好。

以下是我能想到的两个想法:

  1. 将可能冗长的阅读和调整大小过程分成几个 Coroutines .
  2. 使用多线程

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

关于c# - 如何通过 C# 代码在 Android 上的 Unity3D 中创建图像缩略图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42985758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com