16 public static class VolumeImportImages
20 private static readonly
string[] ValidImageFileExtensions = {
".jpg",
".png" };
23 public static byte[] ConvertFolderToVolume(
string folder,
bool inferAlpha, out Int3 size)
25 var imageNames = GetImagesInFolder(folder);
26 size = GetSizeOfVolumeFolder(folder);
27 var voxels =
new VolumeBuffer<Color32>(size);
29 var tex =
new Texture2D(2, 2);
32 foreach (var imageFile
in imageNames)
34 bool loaded = tex.LoadImage(FileSystemHelper.ReadBytesFromLocalFile(imageFile));
37 Debug.LogError(
"Couldn't load '" + imageFile +
"'...");
40 var fromPixels = tex.GetPixels32();
41 for (var y = 0; y < size.y; ++y)
43 for (var x = 0; x < size.x; ++x)
45 var from = fromPixels[x + (y * size.x)];
48 from.a = (byte)Mathf.Max(from.r, from.g, from.b);
50 voxels.SetVoxel(
new Int3(x, y, z), from);
56 voxels.ClearEdges(
new Color32(0, 0, 0, 0));
57 return VolumeTextureUtils.Color32ArrayToByteArray(voxels.DataArray);
60 public static Int3 GetSizeOfVolumeFolder(
string folder)
62 var images = GetImagesInFolder(folder);
64 if (images.Length == 0)
69 var tex =
new Texture2D(2, 2);
70 bool loaded = tex.LoadImage(FileSystemHelper.ReadBytesFromLocalFile(images.First()));
72 return new Int3(tex.width, tex.height, images.Length);
75 private static bool IsFileAnImage(
string file)
77 var fileLower = file.ToLower();
78 return ValidImageFileExtensions.Any(k => fileLower.EndsWith(k));
81 private static string[] GetImagesInFolder(
string folder)
83 return Directory.GetFiles(folder)
84 .Where(k => IsFileAnImage(k))
85 .OrderBy(k => k.ToLower())