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(); }
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); }