PredefinedColorsQuantizerGrayscale4 Method

Gets a PredefinedColorsQuantizer instance that can quantize colors to 2-bit grayscale ones of 4 shades.

See the online help for an example with images.

Definition

Namespace: KGySoft.Drawing.Imaging
Assembly: KGySoft.Drawing.Core (in KGySoft.Drawing.Core.dll) Version: 9.0.0
C#
public static PredefinedColorsQuantizer Grayscale4(
	Color32 backColor = default,
	bool directMapping = false,
	byte alphaThreshold = 128
)

Parameters

backColor  Color32  (Optional)
Colors with alpha (transparency) will be blended with this color before quantizing. The Color32.A field of the background color is ignored. This parameter is optional.
Default value: The default value of the Color32 type, which has the same RGB values as Color.Black.
directMapping  Boolean  (Optional)
to map any color directly to an index instead of searching for a nearest color, which is very fast but may end up in a result of a bit higher contrast than the original image; to perform a lookup to determine nearest colors, which may be slower but more accurate. This parameter is optional.
Default value: .
alphaThreshold  Byte  (Optional)
Specifies a threshold value for the Color32.A field, under which a quantized color is considered completely transparent. Though the quantizer returned from this method never returns alpha colors, it can be relevant in some cases, for example when drawing a partially transparent bitmap onto a solid background. The source pixels, whose alpha value is below the alphaThreshold will be skipped, whereas alpha pixels with higher opacity will be blended with the specified backColor. This parameter is optional.
Default value: 128.

Return Value

PredefinedColorsQuantizer
A PredefinedColorsQuantizer instance that can quantize colors to 2-bit grayscale ones.

Remarks

If directMapping is , then the result of the quantizing may have a higher contrast than without direct color mapping, though this can be compensated if the returned quantizer is combined with an ErrorDiffusionDitherer. Other ditherers preserve the effect of the directMapping parameter.

The returned PredefinedColorsQuantizer instance can return up to 4 possible shades of gray.

This quantizer fits well for the Format4bppIndexed pixel format, though only 4 palette entries are used instead of the possible maximum of 16.

Examples

The following example demonstrates how to use the quantizer returned by this method:
C#
public static IReadWriteBitmapData ToGrayscale4(IReadWriteBitmapData source, Color32 backColor = default, bool directMapping = false, IDitherer ditherer = null)
{
    IQuantizer quantizer = PredefinedColorsQuantizer.Grayscale4(backColor, directMapping);

    // a.) this solution returns a new bitmap data and does not change the original one:
    return source.Clone(KnownPixelFormat.Format4bppIndexed, quantizer, ditherer);

    // b.) alternatively, you can perform the quantizing directly on the source bitmap data:
    if (ditherer == null)
        source.Quantize(quantizer);
    else
        source.Dither(quantizer, ditherer);
    return source;
}

The example above may produce the following results:

Original image
Quantized image

Color hues with alpha gradient
Color hues with alpha gradient

Color hues with 2 BPP grayscale palette and black background using nearest color lookup
Default optional parameter values (black background, nearest color lookup)

Color hues with 2 BPP grayscale palette and silver background using nearest color lookup
Silver background, nearest color lookup

Color hues with 2 BPP grayscale palette and silver background using direct color mapping
Silver background, direct color mapping

Color hues with 2 BPP grayscale palette, silver background, using nearest color lookup and Bayer 8x8 ordered dithering
Silver background, nearest color lookup, Bayer 8x8 dithering

Grayscale color shades with different bit depths
Grayscale color shades

Grayscale color shades with 2 BPP grayscale palette using nearest color lookup
Nearest color lookup

Grayscale color shades with 2 BPP grayscale palette using direct color mapping
Direct color mapping

Grayscale color shades with 2 BPP grayscale palette, using nearest color lookup and Bayer 8x8 ordered dithering
Nearest color lookup, Bayer 8x8 dithering

Shield icon with transparent background
Shield icon with transparency

Shield icon with 2 BPP grayscale palette and black background using nearest color lookup
Default optional parameter values (nearest color lookup)

Shield icon with 2 BPP grayscale palette and silver background using nearest color lookup
Silver background, nearest color lookup

Shield icon with 2 BPP grayscale palette and silver background using direct color mapping
Silver background, direct color mapping

Shield icon with 2 BPP grayscale palette, silver background, using direct color mapping and Floyd-Steinberg dithering
Silver background, direct color mapping, Floyd-Steinberg dithering

Test image "Cameraman"
Original test image "Cameraman"

Test image "Cameraman" with 2 BPP grayscale palette using nearest color lookup
Nearest color lookup

Test image "Cameraman" with 2 BPP grayscale palette using direct color mapping
Direct color mapping

Test image "Cameraman" with 2 BPP grayscale palette using direct color mapping and Floyd-Steinberg dithering
Direct color mapping, Floyd-Steinberg dithering

See Also