- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在 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# 图像处理库,例如 ImageSharp或 search it on GitHub .
最后一个解决方案是自己写一个,如果 3rd 方库的性能或大小仍然不够好。
以下是我能想到的两个想法:
Coroutines
.您也可以尝试 calling java functions from Unity3D .但我对此并不熟悉。
关于c# - 如何通过 C# 代码在 Android 上的 Unity3D 中创建图像缩略图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42985758/
我有一个具有可变数量子元素的固定大小的 div。我不知道 children 的大小。目标是缩小它们以适合父级。 例子: .parent { width: 100px; height: 100p
我是一名优秀的程序员,十分优秀!