public void LoadImageSubsetAsTextures(List <Image> images, ImageToColorArray[] converters, int startIndex, int endIndex, int numThreadsPerImage) { try { for (int i = startIndex; i < endIndex; i++) { Image img = images[i]; Bitmap newBitmap = new Bitmap(img); ImageToColorArray converter = new ImageToColorArray(newBitmap, numThreadsPerImage); converters[i] = converter; converter.Convert(); img = null; newBitmap = null; converter = null; } System.GC.Collect(); } catch (Exception e) { Debug.LogError(e); } }
public IEnumerator LoadImagesAsTextures(List <Image> images, List <Texture2D> textures) { int numConverterThreads = 1; int numThreadsPerImage = 2; StatusText.SetText("Stage 2: Starting threads to convert images"); yield return(null); ImageToColorArray[] converters = new ImageToColorArray[images.Count]; int numConvertersPerThread = images.Count / numConverterThreads; for (int i = 0; i < numConverterThreads; i++) { int startIndex = numConvertersPerThread * i; int endIndex = numConvertersPerThread * (i + 1); if (i == numConverterThreads - 1) { endIndex = images.Count; } Debug.LogFormat("Creating converter that starts at index {0} and ends at index {1}", startIndex, endIndex); ThreadPool.QueueUserWorkItem(new WaitCallback(state => LoadImageSubsetAsTextures(images, converters, startIndex, endIndex, numThreadsPerImage))); } StatusText.SetText("Stage 2: Converting images"); yield return(null); for (int i = 0; i < converters.Length; i++) { while (converters[i] == null || !converters[i].IsFinished()) { yield return(null); } } for (int i = 0; i < converters.Length; i++) { ImageToColorArray converter = converters[i]; StatusText.SetText("Stage 3: Saving images:\n" + (i + 1) + " of " + converters.Length); yield return(null); Texture2D newTex = new Texture2D(converter.width, converter.height); UnityEngine.Color[] pixels = converter.GetFinalArray(); Debug.Log("pixels size is: " + pixels.Length); newTex.SetPixels(pixels); textures.Add(newTex); pixels = null; converters[i] = null; converter = null; newTex = null; } converters = null; System.GC.Collect(); }