Esempio n. 1
0
 private static IEnumerable<byte[]> indexedPixels(ImageBuffer image, Pixel[] lookups, int alphaThreshold, int maxColors, PaletteColorHistory[] paletteHistogram)
 {
     int pixelsCount = image.Image.Width * image.Image.Height;
     var lineIndexes = new byte[(int)System.Math.Ceiling(image.Image.Width / System.Math.Log(256.0, maxColors))];
     PaletteLookup lookup = new PaletteLookup(lookups);
     --maxColors;
     foreach (var pixelLine in image.PixelLines)
     {
         for (int pixelIndex = 0; pixelIndex < pixelLine.Length; pixelIndex++)
         {
             Pixel pixel = pixelLine[pixelIndex];
             byte bestMatch = (byte)maxColors;
             if (pixel.Alpha > alphaThreshold)
             {
                 bestMatch = lookup.GetPaletteIndex(pixel);
                 paletteHistogram[bestMatch].AddPixel(pixel);
             }
             switch (maxColors)
             {
                 case 256 - 1:
                     lineIndexes[pixelIndex] = bestMatch;
                     break;
                 case 16 - 1:
                     if (pixelIndex % 2 == 0) { lineIndexes[pixelIndex / 2] = (byte)(bestMatch << 4); }
                     else { lineIndexes[pixelIndex / 2] |= (byte)(bestMatch & 0x0F); }
                     break;
                 case 2 - 1:
                     if (pixelIndex % 8 == 0) { lineIndexes[pixelIndex / 8] = (byte)(bestMatch << 7); }
                     else { lineIndexes[pixelIndex / 8] |= (byte)((bestMatch & 0x01) << (7 - (pixelIndex % 8))); }
                     break;
             }
         }
         yield return lineIndexes;
     }
 }
Esempio n. 2
0
        private static IEnumerable <byte[]> indexedPixels(ImageBuffer image, Pixel[] lookups, int alphaThreshold, int maxColors, PaletteColorHistory[] paletteHistogram)
        {
            int           pixelsCount = image.Image.Width * image.Image.Height;
            var           lineIndexes = new byte[(int)System.Math.Ceiling(image.Image.Width / System.Math.Log(256.0, maxColors))];
            PaletteLookup lookup      = new PaletteLookup(lookups);

            --maxColors;
            foreach (var pixelLine in image.PixelLines)
            {
                for (int pixelIndex = 0; pixelIndex < pixelLine.Length; pixelIndex++)
                {
                    Pixel pixel     = pixelLine[pixelIndex];
                    byte  bestMatch = (byte)maxColors;
                    if (pixel.Alpha > alphaThreshold)
                    {
                        bestMatch = lookup.GetPaletteIndex(pixel);
                        paletteHistogram[bestMatch].AddPixel(pixel);
                    }
                    switch (maxColors)
                    {
                    case 256 - 1:
                        lineIndexes[pixelIndex] = bestMatch;
                        break;

                    case 16 - 1:
                        if (pixelIndex % 2 == 0)
                        {
                            lineIndexes[pixelIndex / 2] = (byte)(bestMatch << 4);
                        }
                        else
                        {
                            lineIndexes[pixelIndex / 2] |= (byte)(bestMatch & 0x0F);
                        }
                        break;

                    case 2 - 1:
                        if (pixelIndex % 8 == 0)
                        {
                            lineIndexes[pixelIndex / 8] = (byte)(bestMatch << 7);
                        }
                        else
                        {
                            lineIndexes[pixelIndex / 8] |= (byte)((bestMatch & 0x01) << (7 - (pixelIndex % 8)));
                        }
                        break;
                    }
                }
                yield return(lineIndexes);
            }
        }
Esempio n. 3
0
        private static IEnumerable <byte[]> IndexedPixels(ImageBuffer image, Pixel[] lookups, int alphaThreshold, PaletteColorHistory[] paletteHistogram)
        {
            var lineIndexes = new byte[image.Image.Width];
            var lookup      = new PaletteLookup(lookups);

            foreach (var pixelLine in image.PixelLines)
            {
                for (int pixelIndex = 0; pixelIndex < pixelLine.Length; pixelIndex++)
                {
                    Pixel pixel     = pixelLine[pixelIndex];
                    byte  bestMatch = AlphaColor;
                    if (pixel.Alpha > alphaThreshold)
                    {
                        bestMatch = lookup.GetPaletteIndex(pixel);
                        paletteHistogram[bestMatch].AddPixel(pixel);
                    }
                    lineIndexes[pixelIndex] = bestMatch;
                }
                yield return(lineIndexes);
            }
        }