public static DensitySource IdentifyDensitySource(Color[] voxels) { DensitySource source = DensitySource.Unknown; for (int i = 0; i < voxels.Length - 1; i++) { if (!Mathf.Approximately(voxels[i].a, voxels[i + 1].a)) { source = DensitySource.Alpha; break; } else if (!Mathf.Approximately(voxels[i].r, voxels[i + 1].r)) { source = DensitySource.Grey; break; } else if (!Mathf.Approximately(voxels[i].g, voxels[i + 1].g)) { source = DensitySource.Grey; break; } else if (!Mathf.Approximately(voxels[i].b, voxels[i + 1].b)) { source = DensitySource.Grey; break; } } return(source); }
public static int[] ConvertColorsToDensities(Color[] colors, DensitySource source) { int[] densities = new int[colors.Length]; for (int i = 0; i < densities.Length; i++) { densities[i] = ConvertColorToDensity(colors[i], source); } return(densities); }
public static Color ConvertDensityToColor(int density, DensitySource source) { float grey = source == DensitySource.Grey ? density / 255f : 0f; float alpha = source == DensitySource.Alpha ? density / 255f : 0f; return(new Color() { r = grey, g = grey, b = grey, a = alpha }); }
public static int ConvertColorToDensity(Color color, DensitySource source) { switch (source) { case DensitySource.Alpha: return(Mathf.RoundToInt(color.a * 255f)); case DensitySource.Grey: return(Mathf.RoundToInt(color.r * 255f)); default: throw new ArgumentOutOfRangeException(source.ToString()); } }
public static int[] ConvertColorsToDensities(Color[] colors) { DensitySource source = IdentifyDensitySource(colors); return(ConvertColorsToDensities(colors, source)); }