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
