Exemplo n.º 1
0
        public void Quantize(object sender, RoutedEventArgs e)
        {
            // zaimplementuj

            Bitmap bitmap = ConvertImageToBitmap(ConvertFileToBitmapImage("test.jpg", false));
            int    height = bitmap.Height;
            int    width  = bitmap.Width;

            OctreeQuantizer octree = new OctreeQuantizer();

            for (int i = 0; i < width; i++)
            {
                for (int j = 0; j < height; j++)
                {
                    Color pixel = bitmap.GetPixel(i, j);
                    octree.AddColor(new ColorRgb(pixel.R, pixel.G, pixel.B));
                }
            }

            int colorCount;

            if (!int.TryParse(PixelCountTextBox.Text, out colorCount))
            {
                return;
            }

            List <System.Windows.Media.Color> palette = octree.MakePalette(colorCount);

            Bitmap outBitmap = new Bitmap(width, height);

            for (int i = 0; i < width; i++)
            {
                for (int j = 0; j < height; j++)
                {
                    Color pixel = bitmap.GetPixel(i, j);
                    int   index = octree.GetPalletteIndex(new ColorRgb(pixel.R, pixel.G, pixel.B));

                    System.Windows.Media.Color color = palette[index];
                    outBitmap.SetPixel(i, j, Color.FromArgb(color.A, color.R, color.G, color.B));
                }
            }

            ShowImageWindow window = new ShowImageWindow(ConvertBitmapToBitmapImage(outBitmap));

            window.Show();
        }
Exemplo n.º 2
0
        public void AddColor(ColorRgb color, int level, OctreeQuantizer parent)
        {
            if (level >= MaxDepth)
            {
                Color.Red   += color.Red;
                Color.Green += color.Green;
                Color.Blue  += color.Blue;
                PixelCount  += 1;
                return;
            }

            int index = GetColorIndexForLevel(color, level);

            if (_children[index] == null)
            {
                _children[index] = new OctreeNode(level, parent);
            }
            _children[index].AddColor(color, level + 1, parent);
        }