This sounds reasonable.
Can you send me an example TGA that has this problem?
On Apr 24, 2013, at 6:13 AM, Michel Lerenard wrote:
> Resuming my previous monologue...
>
> Digging a bit in the targa plugin i found that no check was done between the
> flags of the channels and the actual channels in the file.
>
> I modified the code from
>
> m_alpha = (m_tga.attr & 0x0F) > 0 ? TGA_ALPHA_USEFUL : TGA_ALPHA_NONE;
>
> to
>
> m_alpha = TGA_ALPHA_NONE;
> if (((m_tga.type == TYPE_RGB || m_tga.type == TYPE_RGB_RLE) && m_tga.bpp
> == 32 )
> || ((m_tga.type == TYPE_GRAY || m_tga.type == TYPE_GRAY_RLE) &&
> m_tga.bpp > 8 )) {
> m_alpha = (m_tga.attr & 0x08) > 0 ? TGA_ALPHA_USEFUL :
> TGA_ALPHA_NONE;
> }
>
> The idea is to make sure there is a channel in the file, even if the flag
> says the data is used. In the file I have, the m_tga.attr value is equal to
> 8, which is, as far as I understand, absolutely inconsistent with the channel
> in the file.
> If I understand the meaning of the flag, I should be set to 1, meaning the
> first channel has useful information, instead of 8 meaning the last channel
> (here, alpha), has useful info.
>
> I'd appreciate very much if someone could tell me if my fix is correct, and
> if i understood correctly how the tga header work ?
> Thanks.
>
> PS : I used this page http://www.paulbourke.net/dataformats/tga/ to get TGA
> specs.
>
> On 4/24/2013 1:30 PM, Lerenard Michel wrote:
>> I found why OIIO finds two channels in the file. The tga_alpha_type of the
>> file has been set to TGA_ALPHA_UNDEFINED_RETAIN.
>>
>> I do not know how TGA works, I then have a question: what is the use of such
>> a flag ? How is it set ? Can i ignore it ?
>>
>> To be able to load correctly this type of file (ie discard the alpha layer),
>> i have to parse the data buffer returned by OIIO, and it costs quite some
>> time. I there another way to detect such an empty channel before calling
>> "read_scanlines" which i use ?
>>
>>
>> 2013/4/24 Michel Lerenard <[email protected]>
>> Hi,
>>
>> I've spotted a weird behavior when opening grayscale files, i'm wondering if
>> I have to check something else in the header or if it is the correct
>> behavior: the ImageSpec structure tells me there are two channels in the
>> file, one called 'I' and another called 'A', which is absolutely black. (ie
>> empty ?)
>>
>> The file i'm opening is a simple black and white TGA used as a mask, with,
>> according to Gimp, photoshop, xnview, etc... a single color channel. ( 8
>> bits )
>> Is there a way to check if a given channel is empty ? Apparently the file
>> does not hold any data for alpha, so i'm wondering if OIIO is creating an
>> alpha channel for compatibility and if I should check some attributes to
>> detect if there is actually any data in it ?
>>
>>
>> Thanks for your help.
>>
>
> _______________________________________________
> Oiio-dev mailing list
> [email protected]
> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
--
Larry Gritz
[email protected]
_______________________________________________
Oiio-dev mailing list
[email protected]
http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org