VintaSoft Imaging .NET SDK 15.1: Documentation for .NET developer
Vintasoft.Imaging.Codecs.Encoders Namespace / JpegEncoderSettings Class / QuantizationTables Property
Syntax Exceptions Remarks Example Requirements SeeAlso
In This Topic
QuantizationTables Property (JpegEncoderSettings)
In This Topic
Gets or sets quantization tables for the JPEG image.
Syntax
'Declaration

<BrowsableAttribute(False)>
Public Property QuantizationTables As System.Int32[][]

[Browsable(False)]
public System.Int32[][] QuantizationTables { get; set; }

Property Value

The array must contain from 1 to 4 arrays, each of them containing 64 elements of a quantization table in a zig-zag order for a component with index equal to the index of the array. Number of quantization tables must be sufficient for components of JPEG image. Each element of a quantization table must be in range from 1 to 255.
Default value is null.
Exceptions
ExceptionDescription
Thrown if quantization table count is less than 1 or greater than 4.
Remarks

If value of this property is null then quantization tables will be generated depending on the value of the Quality. Otherwise, value of the Quality is ignored, and specified tables are used.

When encoding CMYK images, quantization tables should be specified explicitly.

Example

Here is an example that shows how to save image as CMYK JPEG image:


''' <summary>
''' Saves image as CMYK JPEG image.
''' </summary>
''' <param name="sourceImage">The source image.</param>
''' <param name="iccProfile">The ICC profile.</param>
''' <param name="outFilePath">The output file path.</param>
Public Sub SaveCmykJpegImage(sourceImage As Vintasoft.Imaging.VintasoftImage, iccProfile As Vintasoft.Imaging.ColorManagement.Icc.IccProfile, outFilePath As String)
    If iccProfile Is Nothing Then
        Throw New System.ArgumentNullException()
    End If
    If iccProfile.DeviceColorSpace <> Vintasoft.Imaging.ColorSpaceType.CMYK Then
        Throw New System.InvalidOperationException()
    End If

    ' convert image to BGR24 format
    Dim converter As New Vintasoft.Imaging.ImageProcessing.ChangePixelFormatToBgrCommand(Vintasoft.Imaging.PixelFormat.Bgr24)
    Using image As Vintasoft.Imaging.VintasoftImage = converter.Execute(sourceImage)
        ' create new color management decoding settings
        Dim colorManagement As New Vintasoft.Imaging.ColorManagement.ColorManagementDecodeSettings()
        ' set output CMYK profile
        colorManagement.OutputCmykProfile = iccProfile
        ' get color transform (BGR to CMYK)
        Dim colorTransform As Vintasoft.Imaging.ColorManagement.ColorTransform = colorManagement.GetColorTransform(Vintasoft.Imaging.ColorSpaceFormats.Bgr, Vintasoft.Imaging.ColorSpaceFormats.Cmyk)

        ' create a color transform command
        Dim command As New Vintasoft.Imaging.ImageProcessing.Color.ColorTransformCommand()
        ' set color transform
        command.ColorTransform = colorTransform
        ' set format of channels of result image (4 channels to 8 bits)
        command.OutputChannelsFormat = New Vintasoft.Imaging.BitmapChannelsFormat(4, 8)
        command.ExecuteInPlace(image)

        ' create JPEG encoder
        Dim encoder As New Vintasoft.Imaging.Codecs.Encoders.JpegEncoder()
        ' create settings of JPEG encoder
        Dim settings As New Vintasoft.Imaging.Codecs.Encoders.JpegEncoderSettings()
        ' disable subsampling
        settings.IsSubsamplingDisabled = True
        Dim table As Integer() = New Integer() {8, 6, 6, 7, 6, 5, _
            8, 7, 7, 7, 9, 9, _
            8, 10, 12, 20, 13, 12, _
            11, 11, 12, 25, 18, 19, _
            15, 20, 29, 26, 31, 30, _
            29, 26, 28, 28, 32, 36, _
            46, 39, 32, 34, 44, 35, _
            28, 28, 40, 55, 41, 44, _
            48, 49, 52, 52, 52, 31, _
            39, 57, 61, 56, 50, 60, _
            46, 51, 52, 50}
        ' set quantization table of channels
        settings.QuantizationTables = New Integer()() {table, table, table, table}
        encoder.Settings = settings
        ' save image as CMYK JPEG image
        image.Save(outFilePath, encoder)
    End Using
End Sub


/// <summary>
/// Saves image as CMYK JPEG image.
/// </summary>
/// <param name="sourceImage">The source image.</param>
/// <param name="iccProfile">The ICC profile.</param>
/// <param name="outFilePath">The output file path.</param>
public void SaveCmykJpegImage(
    Vintasoft.Imaging.VintasoftImage sourceImage,
    Vintasoft.Imaging.ColorManagement.Icc.IccProfile iccProfile,
    string outFilePath)
{
    if (iccProfile == null)
        throw new System.ArgumentNullException();
    if (iccProfile.DeviceColorSpace != Vintasoft.Imaging.ColorSpaceType.CMYK)
        throw new System.InvalidOperationException();

    // convert image to BGR24 format
    Vintasoft.Imaging.ImageProcessing.ChangePixelFormatToBgrCommand converter =
        new Vintasoft.Imaging.ImageProcessing.ChangePixelFormatToBgrCommand(Vintasoft.Imaging.PixelFormat.Bgr24);
    using (Vintasoft.Imaging.VintasoftImage image = converter.Execute(sourceImage))
    {
        // create new color management decoding settings
        Vintasoft.Imaging.ColorManagement.ColorManagementDecodeSettings colorManagement =
            new Vintasoft.Imaging.ColorManagement.ColorManagementDecodeSettings();
        // set output CMYK profile
        colorManagement.OutputCmykProfile = iccProfile;
        // get color transform (BGR to CMYK)
        Vintasoft.Imaging.ColorManagement.ColorTransform colorTransform = colorManagement.GetColorTransform(
            Vintasoft.Imaging.ColorSpaceFormats.Bgr,
            Vintasoft.Imaging.ColorSpaceFormats.Cmyk);

        // create a color transform command
        Vintasoft.Imaging.ImageProcessing.Color.ColorTransformCommand command =
            new Vintasoft.Imaging.ImageProcessing.Color.ColorTransformCommand();
        // set color transform
        command.ColorTransform = colorTransform;
        // set format of channels of result image (4 channels to 8 bits)
        command.OutputChannelsFormat = new Vintasoft.Imaging.BitmapChannelsFormat(4, 8);
        command.ExecuteInPlace(image);

        // create JPEG encoder
        Vintasoft.Imaging.Codecs.Encoders.JpegEncoder encoder =
            new Vintasoft.Imaging.Codecs.Encoders.JpegEncoder();
        // create settings of JPEG encoder
        Vintasoft.Imaging.Codecs.Encoders.JpegEncoderSettings settings =
            new Vintasoft.Imaging.Codecs.Encoders.JpegEncoderSettings();
        // disable subsampling
        settings.IsSubsamplingDisabled = true;
        int[] table = new int[] { 
            8, 6, 6, 7, 6, 5, 8, 7,
            7, 7, 9, 9, 8, 10, 12, 20,
            13, 12, 11, 11, 12, 25, 18, 19, 
            15, 20, 29, 26, 31, 30, 29, 26, 
            28, 28, 32, 36, 46, 39, 32, 34,
            44, 35, 28, 28, 40, 55, 41, 44, 
            48, 49, 52, 52, 52, 31, 39, 57,
            61, 56, 50, 60, 46, 51, 52, 50 };
        // set quantization table of channels
        settings.QuantizationTables = new int[][] { table, table, table, table };
        encoder.Settings = settings;
        // save image as CMYK JPEG image
        image.Save(outFilePath, encoder);
    }
}

Requirements

Target Platforms: .NET 10; .NET 9; .NET 8; .NET 7; .NET 6; .NET Framework 4.8, 4.7, 4.6, 4.5, 4.0, 3.5

See Also