Some TIFF images are not properly formed, for example having an extra channel marked as being unspecified data while they should be treated as being an alpha channel. Detect some of those cases so that these TIFF images now will have alpha.
Applied patch by gmeeker. Closes #12874.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66717
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
TIFFGetField( tif, TIFFTAG_IMAGEWIDTH, &w );
TIFFGetField( tif, TIFFTAG_IMAGELENGTH, &h );
TIFFGetField( tif, TIFFTAG_IMAGEWIDTH, &w );
TIFFGetField( tif, TIFFTAG_IMAGELENGTH, &h );
+ uint16 photometric;
+ uint16 samplesPerPixel;
uint16 extraSamples;
uint16* samplesInfo;
uint16 extraSamples;
uint16* samplesInfo;
+ TIFFGetFieldDefaulted(tif, TIFFTAG_SAMPLESPERPIXEL, &samplesPerPixel);
TIFFGetFieldDefaulted(tif, TIFFTAG_EXTRASAMPLES,
&extraSamples, &samplesInfo);
TIFFGetFieldDefaulted(tif, TIFFTAG_EXTRASAMPLES,
&extraSamples, &samplesInfo);
- const bool hasAlpha = (extraSamples == 1 &&
- (samplesInfo[0] == EXTRASAMPLE_ASSOCALPHA ||
- samplesInfo[0] == EXTRASAMPLE_UNASSALPHA));
+ if (!TIFFGetField(tif, TIFFTAG_PHOTOMETRIC, &photometric))
+ {
+ photometric = PHOTOMETRIC_MINISWHITE;
+ }
+ const bool hasAlpha = (extraSamples >= 1
+ && ((samplesInfo[0] == EXTRASAMPLE_UNSPECIFIED && samplesPerPixel > 3)
+ || samplesInfo[0] == EXTRASAMPLE_ASSOCALPHA
+ || samplesInfo[0] == EXTRASAMPLE_UNASSALPHA))
+ || (extraSamples == 0 && samplesPerPixel == 4
+ && photometric == PHOTOMETRIC_RGB);
// guard against integer overflow during multiplication which could result
// in allocating a too small buffer and then overflowing it
// guard against integer overflow during multiplication which could result
// in allocating a too small buffer and then overflowing it