Reference Guide
Programming / TIFF / Saving bitonal TIFF document with Photometric 0 (White is 0) and CCITT4 compression
In This Topic
    Saving bitonal TIFF document with Photometric 0 (White is 0) and CCITT4 compression
    In This Topic

    Some (buggy) image viewers, such as 'Windows Picture and Fax Viewer' used in Windows XP, simply ignore the photometric interpretation tag of group 3 and group 4 TIFF documents by assuming, that black color is always encoded with the bit 1, and therefore display them as reversed, when the photometric is set to 1.

    While saving bitonal TIFF images, GdPicture.NET (starting V.10) behaves in the following way:

    So if you need to maximize compatibility with 'Windows Picture and Fax Viewer', you have to ensure to save your image using photometric mode 0. For such purpose you have to process like this:

    1. Check the intented photometric of the image by obtaining color palette information.
    2. In case of photometric 1, you have to negative the image pixel and invert the two palette entries.

    So a simple code snippet here demonstrates, how to enforce the photometric 0 of an existing tiff image.

    Copy Code
    'We assume that GdPicture has been correctly installed and unlocked.
    Dim oGdPictureImaging As New GdPictureImaging()
    Dim ImageID As Integer = oGdPictureImaging.CreateGdPictureImageFromFile("c:\myfile.tif", True)
    If oGdPictureImaging.GetStat() = GdPictureStatus.OK Then
        If (oGdPictureImaging.GetBitDepth(ImageID) = 1) AndAlso
           (oGdPictureImaging.PaletteGetEntry(ImageID, 0).ToArgb() = Color.Black.ToArgb()) AndAlso
           (oGdPictureImaging.PaletteGetEntry(ImageID, 1).ToArgb() = Color.White.ToArgb()) Then
            If (oGdPictureImaging.FxNegative(ImageID) = GdPictureStatus.OK) AndAlso
               (oGdPictureImaging.PaletteSet(ImageID, New Color() {Color.White, Color.Black}) = GdPictureStatus.OK) AndAlso
               (oGdPictureImaging.SaveAsTIFF(ImageID, "c:\myfile.tif", TiffCompression.TiffCompressionCCITT4) = GdPictureStatus.OK) Then
                MessageBox.Show("Done!", "Bitonal TIFF Example", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Else
                MessageBox.Show("Error: " + oGdPictureImaging.GetStat().ToString(), "Bitonal TIFF Example", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End If
        End If
        oGdPictureImaging.ReleaseGdPictureImage(ImageID)
    Else
        MessageBox.Show("Error: " + oGdPictureImaging.GetStat().ToString(), "Bitonal TIFF Example", MessageBoxButtons.OK, MessageBoxIcon.Error)
    End If
    oGdPictureImaging.Dispose()
    Copy Code
    //We assume that GdPicture has been correctly installed and unlocked.
    GdPictureImaging oGdPictureImaging = new GdPictureImaging();
    int ImageID = oGdPictureImaging.CreateGdPictureImageFromFile("c:\\myfile.tif", true);
    if (oGdPictureImaging.GetStat() == GdPictureStatus.OK)
    {
        if ((oGdPictureImaging.GetBitDepth(ImageID) == 1) &&
            (oGdPictureImaging.PaletteGetEntry(ImageID, 0).ToArgb() == Color.Black.ToArgb()) &&
            (oGdPictureImaging.PaletteGetEntry(ImageID, 1).ToArgb() == Color.White.ToArgb()))
        {
            if ((oGdPictureImaging.FxNegative(ImageID) == GdPictureStatus.OK) &&
                (oGdPictureImaging.PaletteSet(ImageID, new Color[] { Color.White, Color.Black }) == GdPictureStatus.OK) &&
                (oGdPictureImaging.SaveAsTIFF(ImageID, "c:\\myfile.tif", TiffCompression.TiffCompressionCCITT4) == GdPictureStatus.OK))
                MessageBox.Show("Done!", "Bitonal TIFF Example", MessageBoxButtons.OK, MessageBoxIcon.Information);
            else
                MessageBox.Show("Error: " + oGdPictureImaging.GetStat().ToString(), "Bitonal TIFF Example", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
        oGdPictureImaging.ReleaseGdPictureImage(ImageID);
    }
    else
        MessageBox.Show("Error: " + oGdPictureImaging.GetStat().ToString(), "Bitonal TIFF Example", MessageBoxButtons.OK, MessageBoxIcon.Error);
    oGdPictureImaging.Dispose();