Пример #1
0
        private async void OnThresholdButtonClick(object sender, RoutedEventArgs eventArgs)
        {
            if (mainWindow.Working)
            {
                return;
            }
            if (mainWindow.CurrentBitmap != null && mainWindow.ColorPalette.Count > 0)
            {
                mainWindow.Working = true;
                statusText.Text    = "Thresholding image";
                Bitmap bitmap = await Task.Run(() => Ditherer.ClosestColor(mainWindow.CurrentBitmap, mainWindow.ColorPalette.ToArray()));

                mainWindow.ChangeMainImage(bitmap);
                statusText.Text    = "";
                mainWindow.Working = false;
            }
        }
Пример #2
0
        private async void OnRandomButtonClick(object sender, RoutedEventArgs eventArgs)
        {
            if (mainWindow.Working)
            {
                return;
            }
            if (mainWindow.CurrentBitmap != null && mainWindow.ColorPalette.Count > 0)
            {
                mainWindow.Working = true;
                statusText.Text    = "Dithering image";
                float  bias   = (float)randomBiasNumeric.Value;
                Bitmap bitmap = await Task.Run(() => Ditherer.RandomDither(mainWindow.CurrentBitmap, mainWindow.ColorPalette.ToArray(), bias));

                mainWindow.ChangeMainImage(bitmap);
                statusText.Text    = "";
                mainWindow.Working = false;
            }
        }
Пример #3
0
        private async void OnMinAvgErrButtonClick(object sender, RoutedEventArgs eventArgs)
        {
            if (mainWindow.Working)
            {
                return;
            }
            if (mainWindow.CurrentBitmap != null && mainWindow.ColorPalette.Count > 0)
            {
                mainWindow.Working = true;
                statusText.Text    = "Dithering image";
                float[] errorMatrix = new float[12];
                for (int i = 0; i < errorMatrix.Length; i++)
                {
                    errorMatrix[i] = (float)(twoRowErrorNumeric[i].Value / twoRowErrorMultiplierNumeric.Value);
                }
                Bitmap bitmap = await Task.Run(() => Ditherer.MinAvgErrDither(mainWindow.CurrentBitmap, mainWindow.ColorPalette.ToArray(), errorMatrix));

                mainWindow.ChangeMainImage(bitmap);
                statusText.Text    = "";
                mainWindow.Working = false;
            }
        }
Пример #4
0
        static float DitherOneImage(Bitmap srcData, Bitmap dstData, DitherPattern pattern, Color transparentColorKey)
        {
            Ditherer ditherer = new Ditherer(srcData.Width, srcData.Height);

            for (int x = 0; x < srcData.Width; x++)
            {
                for (int y = 0; y < srcData.Height; y++)
                {
                    Color c = srcData.GetPixel(x, y);

                    if (c == transparentColorKey || c.A == 0)
                    {
                        dstData.SetPixel(x, y, Color.FromArgb(0));
                    }
                    else
                    {
                        dstData.SetPixel(x, y, ditherer.Dither(x, y, c, pattern));
                    }
                }
            }

            return(ditherer.RootMeanSquaredError);
        }
Пример #5
0
        private async void OnOrderedButtonClick(object sender, RoutedEventArgs eventArgs)
        {
            if (mainWindow.Working)
            {
                return;
            }
            if (mainWindow.CurrentBitmap != null && mainWindow.ColorPalette.Count > 0)
            {
                mainWindow.Working = true;
                statusText.Text    = "Dithering image";
                float[,] matrix    = new float[4, 4];
                for (int i = 0; i < orderedMatrixNumeric.Length; i++)
                {
                    matrix[i % 4, i / 4] = ((float)orderedMatrixNumeric[i].Value) / orderedMatrixNumeric.Length;
                }
                //todo: configurable size
                Bitmap bitmap = await Task.Run(() => Ditherer.OrderedDither(mainWindow.CurrentBitmap, mainWindow.ColorPalette.ToArray(), matrix));

                mainWindow.ChangeMainImage(bitmap);
                statusText.Text    = "";
                mainWindow.Working = false;
            }
        }