Class OrderedDither

  • All Implemented Interfaces:
    RGBIndex

    public class OrderedDither
    extends ImageToImageOperation
    implements RGBIndex
    This operation reduces the color depth of RGB truecolor images and grayscale images by applying ordered dithering. A relatively nice output image (for a human observer) will be created at the cost of introducing noise into the output image. The algorithm is relatively fast, but its quality is usually inferior to what can be reached by using ErrorDiffusionDithering or similar other methods.

    Supported conversions

    • Grayscale to bilevel maps GrayIntegerImage objects to BilevelImage objects.
    • Grayscale to grayscale maps GrayIntegerImage objects to other GrayIntegerImage objects. Right now, only Gray8Image objects are supported. After reducing the number of bits, each sample is immediately scaled back to 8 bits per pixel in order to fit into another Gray8Image object.
    • Truecolor to paletted maps RGBIntegerImage objects to Paletted8Image objects; the sum of the output bits must not be larger than 8

    Usage example

    The following code snippet demonstrates how to create a paletted image with 256 colors, using three bits for red and green and two bits for blue, from an RGB truecolor image.
     OrderedDither od = new OrderedDither();
     od.setRgbBits(3, 3, 2);
     od.setInputImage(image);
     od.process();
     Paletted8Image ditheredImage = (Paletted8Image)od.getOutputImage();
     
    Author:
    Marco Schmidt
    • Field Detail

      • values

        private int[] values
      • valueWidth

        private int valueWidth
      • valueHeight

        private int valueHeight
      • grayBits

        private int grayBits
      • redBits

        private int redBits
      • greenBits

        private int greenBits
      • blueBits

        private int blueBits
    • Constructor Detail

      • OrderedDither

        public OrderedDither()
    • Method Detail

      • setOutputBits

        public void setOutputBits​(int bits)
      • setRgbBits

        public void setRgbBits​(int red,
                               int green,
                               int blue)
        Sets the number of bits to be used for each RGB component in the output image. Each argument must be one or larger. The values defined by this method are only used if the input image implements RGBIntegerImage. Later, in process(net.sourceforge.jiu.data.Gray8Image, net.sourceforge.jiu.data.Gray8Image), these values are checked against the actual number of bits per component in the input image. If any of the arguments of this method is equal to or larger than those actual bits per channel values, a WrongParameterException will then be thrown. Right now, there is no way how this can be checked, because the input image may not have been defined yet.
        Parameters:
        red - number of bits for the red channel in the output image
        green - number of bits for the green channel in the output image
        blue - number of bits for the blue channel in the output image
        Throws:
        IllegalArgumentException - if at least one argument is smaller than 1
      • setThresholdValues

        public void setThresholdValues​(int[] values,
                                       int valueWidth,
                                       int valueHeight)
        Defines a matrix of threshold values that will be used for grayscale dithering.
        Parameters:
        values - the int values to use for comparing
        valueWidth -
        valueHeight -