[BUG] TIFFs saved with CMYK ColorSpace always get converted to 8-bit
Describe the bug
When trying to save 16-bit data into a TIFF with CMYK color space applied, it outputs as 8-bit instead.
OpenImageIO version and dependencies
2.4.11.0
To Reproduce
Steps to reproduce the behavior:
- Create an ImageSpec with UINT16 format, and
tiff:ColorSpaceset to "CMYK" - Open ImageOutput with the spec
- Write 16-bit data to it
- Output file is 8-bit
Not sure how to reproduce this flow in oiiotool, but if someone can give me a command that does this I can try it out.
Evidence
Cannot attach specific images, but exiftool, Mac Preview, and Photoshop all confirm that the output is 8-bit.
IF YOU ALREADY HAVE A CODE FIX: There is no need to file a separate issue, please just go straight to making a pull request.
I do not have a code fix specifically, but mainly opening this as a question on a portion of code I think is causing this. Specifically, this if statement will evaluate to true no matter what format is:
https://github.com/AcademySoftwareFoundation/OpenImageIO/blob/24f172a7e7581fa8c38bee2d01a7e8e4985b3d8b/src/tiff.imageio/tiffoutput.cpp#L721-L722
Because of this everything is getting converted to 8-bit. However, I'm not sure if it's trying to do this on purpose because there doesn't seem to be any handling for 16-bit values.
For reference, this is what my potential fix would be, but I am not in a position to test this properly right now and probably won't be soon which is why this is not a PR.
m_photometric = PHOTOMETRIC_SEPARATED;
if (m_spec.format == TypeDesc::UINT16) {
m_bitspersample = 16;
} else {
// Make everything else UINT8
m_spec.format = TypeDesc::UINT8;
m_bitspersample = 8;
}
TIFFSetField(m_tif, TIFFTAG_BITSPERSAMPLE, m_bitspersample);
TIFFSetField(m_tif, TIFFTAG_SAMPLEFORMAT, SAMPLEFORMAT_UINT);
if (source_is_rgb(m_spec)) {