private void decolorizeGeneratorWorker_DoWork(object sender, DoWorkEventArgs e) { int width = (e.Argument as DecolorizeGenTaskData).width; int height = (e.Argument as DecolorizeGenTaskData).height; int[] pixels = (e.Argument as DecolorizeGenTaskData).pixels; int[] grayscale_pixels = pixels.Clone() as int[]; for (int i = 0; i < grayscale_pixels.Length; i++) { byte[] color = BitConverter.GetBytes(grayscale_pixels[i]); byte gray = (byte)((color[0] * 11 + color[1] * 16 + color[2] * 5) / 32); grayscale_pixels[i] = (color[3] << 24) | (gray << 16) | (gray << 8) | gray; } DecolorizeGenTaskData task_data = new DecolorizeGenTaskData(); task_data.width = width; task_data.height = height; task_data.pixels = grayscale_pixels; e.Result = task_data; }
private void LoadImage(WriteableBitmap bitmap) { if (bitmap.PixelWidth != 0 && bitmap.PixelHeight != 0) { this.loadedBitmap = bitmap; DecolorizeGenTaskData task_data = new DecolorizeGenTaskData(); task_data.width = bitmap.PixelWidth; task_data.height = bitmap.PixelHeight; task_data.pixels = bitmap.Pixels; this.decolorizeGeneratorWorker.RunWorkerAsync(task_data); this.GenerationProgressIndicator.IsVisible = true; } }