There are very few such configuration options now. I'll keep this on the back 
burner, but I guess if I did the work now to make this general, it wouldn't 
have any widespread use.

Glad the workaround seems to do the trick.

        -- lg


On Jun 13, 2014, at 11:08 AM, Nicolas Burtnyk <[email protected]> wrote:

> For us it's not particularly common and the workaround is simple enough, so I 
> would say it's low priority to provide a direct way to do this with ImageBuf.
> That being said, if there are spec attributes that affect how images are 
> read, IMO it's reasonable to assume you could specify those attributes when 
> using ImageBuf.
> 
> 
> 
> On Fri, Jun 13, 2014 at 11:05 AM, Larry Gritz <[email protected]> wrote:
> Great.
> 
> Is this a common enough problem that we should have a direct way to tell 
> ImageBuf to do this upon load? Or is it a one-time edge case you just needed 
> a workaround for and will probably not recur?
> 
>       -- lg
> 
> 
> On Jun 13, 2014, at 11:02 AM, Nicolas Burtnyk <[email protected]> wrote:
> 
>> Thanks Larry,
>> 
>> We went with a variation on technique #2.
>> 
>> Cheers,
>> 
>> -Nicolas
>> 
>> On Thu, Jun 12, 2014 at 10:12 AM, Larry Gritz <[email protected]> wrote:
>> There is a way to do this with plain ImageInput. One variety of 
>> ImageInput::open take a "configuration", which you can seed with an 
>> attribute called "oiio:UnassociatedAlpha" (set to 1) that instructs the TGA 
>> reader to not premultiply the RGB by the A. 
>> 
>>      ImageSpec config;
>>      config.attribute ("oiio:UnassociatedAlpha", 1);
>>         ImageInput *in = ImageInput::open (filename, &config);
>>         const ImageSpec &spec = in->spec();
>>         std::vector<unsigned char> pixels 
>> (spec.width*spec.height*spec.channels);
>>         in->read_image (TypeDesc::UINT8, &pixels[0]);
>>         in->close ();
>>         delete in;
>> 
>> There's not a very clean way to do this with an ImageBuf.
>> 
>> I suppose one strategy is to create a blank ImageBuf, then read into it in a 
>> variation of the above. Instead of declaring that std::vector, you could do 
>> this:
>> 
>>      ImageSpec config;
>>      config.attribute ("oiio:UnassociatedAlpha", 1);
>>         ImageInput *in = ImageInput::open (filename, &config);
>>         const ImageSpec &spec = in->spec();
>>      ImageBuf buf;
>>      buf.alloc (spec);  // size it based on the input image
>>         in->read_image (TypeDesc::UINT8, buf.localpixels());
>>         in->close ();
>>         delete in;
>> 
>> And then proceed to use the ImageBuf as you always would.
>> 
>> I admit this is kind of clunky. It's probably better to add some kind of 
>> method to ImageBuf that lets you specify a "configuration" that will be 
>> applied when the file is opened and read.
>> 
>> 
>> 
>> On Jun 9, 2014, at 8:56 PM, Nicolas Burtnyk <[email protected]> wrote:
>> 
>>> We're running into an issue with where we're using ImageBuf to read a TGA 
>>> file which happens to have an alpha channel filled with zeros.  We want to 
>>> grab the data in the red and green channels without an premultiplication 
>>> (otherwise they're just all 0).  Is this currently possible with ImageBuf?
>>> 
>>> Thanks!
>>> 
>>> Nicolas
>> 
>> 
> 
> --
> Larry Gritz
> [email protected]
> 
> 
> 
> 
> _______________________________________________
> Oiio-dev mailing list
> [email protected]
> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
> 
> 
> _______________________________________________
> 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

Reply via email to