Color dithering using Floyd-Steinberg error diffusion.

The image processing routine represents color dithering algorithm, which is based on error diffusion dithering with Floyd-Steinberg coefficients. Error is diffused on 4 neighbor pixels with the next coefficients:

| * | 7 | | 3 | 5 | 1 | / 16

The image processing routine accepts 24/32 bpp color images for processing. As a result this routine produces 4 bpp or 8 bpp indexed image, which depends on size of the specified color table - 4 bpp result for color tables with 16 colors or less; 8 bpp result for larger color tables.

Sample usage:

// create color image quantization routine ColorImageQuantizer ciq = new ColorImageQuantizer( new MedianCutQuantizer( ) ); // create 16 colors table Color[] colorTable = ciq.CalculatePalette( image, 16 ); // create dithering routine FloydSteinbergColorDithering dithering = new FloydSteinbergColorDithering( ); dithering.ColorTable = colorTable; // apply the dithering routine Bitmap newImage = dithering.Apply( image );

Initial image:

Result image:

Inheritance: ColorErrorDiffusionToAdjacentNeighbors
        private Bitmap reducedColor(Bitmap image, int numColors)
        {
            // create color image quantization routine
            ColorImageQuantizer ciq = new ColorImageQuantizer(new MedianCutQuantizer());
            // create 16 colors table
            Color[] colorTable = ciq.CalculatePalette(image, numColors);
            // create dithering routine
            FloydSteinbergColorDithering dithering = new FloydSteinbergColorDithering();
            dithering.ColorTable = colorTable;
            // apply the dithering routine
            Bitmap newImage = dithering.Apply(image);

            return newImage;
        }
Exemplo n.º 2
0
 public static Bitmap FloydSteinbergColorDithering(Bitmap bmp, int value)
 {
     // create color image quantization routine
     ColorImageQuantizer ciq = new ColorImageQuantizer(new MedianCutQuantizer());
     // create 16 colors table
     Color[] colorTable = ciq.CalculatePalette(bmp, value);
     // create dithering routine
     FloydSteinbergColorDithering dithering = new FloydSteinbergColorDithering();
     dithering.ColorTable = colorTable;
     // apply the dithering routine
     Bitmap newImage = dithering.Apply(bmp);
     return newImage;
 }
Exemplo n.º 3
0
        private static Bitmap QuantizeImage(KindleProfile profile, UnmanagedImage image)
        {
            Bitmap output;
            FloydSteinbergColorDithering dithering = new FloydSteinbergColorDithering();
            dithering.ColorTable = profile.Palette;

            output = dithering.Apply(image);

            return output;
        }