Exemplo n.º 1
0
        public static unsafe void CalculateOctreeColorQuantization(byte *pBuffer, WriteableBitmap bitmap, params object[] otherParams)
        {
            int width     = bitmap.PixelWidth;
            int height    = bitmap.PixelHeight;
            int maxColors = (int)otherParams[0];

            OctreeColorQuantizer octreeColorQuantizer = new OctreeColorQuantizer(maxColors);

            for (int y = 0; y < height; y++) // Prepare quantization
            {
                for (int x = 0; x < width; x++)
                {
                    octreeColorQuantizer.AddPixelColor(pBuffer[4 * x + (y * bitmap.BackBufferStride) + 0], pBuffer[4 * x + (y * bitmap.BackBufferStride) + 1], pBuffer[4 * x + (y * bitmap.BackBufferStride) + 2]);
                }
            }

            octreeColorQuantizer.FinalizePalette();

            for (int y = 0; y < height; y++) // Write new pixel values from generated palette
            {
                for (int x = 0; x < width; x++)
                {
                    (int b, int g, int r)newColor = octreeColorQuantizer.GetNearestPaletteColor(pBuffer[4 * x + (y * bitmap.BackBufferStride) + 0], pBuffer[4 * x + (y * bitmap.BackBufferStride) + 1], pBuffer[4 * x + (y * bitmap.BackBufferStride) + 2]);
                    pBuffer[4 * x + (y * bitmap.BackBufferStride) + 0] = (byte)newColor.b;
                    pBuffer[4 * x + (y * bitmap.BackBufferStride) + 1] = (byte)newColor.g;
                    pBuffer[4 * x + (y * bitmap.BackBufferStride) + 2] = (byte)newColor.r;
                }
            }
        }
Exemplo n.º 2
0
        public OctreeNode(OctreeNode parentNode, int treeLevel, OctreeColorQuantizer octreeColorQuantizer)
        {
            this.parentNode           = parentNode;
            this.treeLevel            = treeLevel;
            this.octreeColorQuantizer = octreeColorQuantizer;

            children = new OctreeNode[8];
            octreeColorQuantizer.leafCount++;

            octreeColorQuantizer.treeLevels[treeLevel].Add(this); // Register this node in list of nodes for each level in octreeColorQuantizer
        }