I think it was an oversight.
I just posted a PR that add this yesterday!
https://github.com/OpenImageIO/oiio/pull/2640
<https://github.com/OpenImageIO/oiio/pull/2640>
This hasn't been reviewed and merged yet, but the important code change is only
7 lines, so you could easily merge and test it on your end if you can't wait
for a release.
-- lg
> On Jul 12, 2020, at 11:49 PM, Frank Du <[email protected]> wrote:
>
> Hi Larry,
>
> I could use the ImageBuf.write that outputs to an already open ImageOutput on
> the Python side. Is there a reason that is currently missing or is that
> something that's easy to add?
>
> - Frank
> From: Oiio-dev <[email protected]> on behalf of Larry
> Gritz <[email protected]>
> Sent: Sunday, July 12, 2020 8:01 PM
> To: OpenImageIO developers <[email protected]>
> Subject: Re: [Oiio-dev] Cropping of multi Images
>
> Hi, sorry this seemed to slip through the cracks. I hope the information is
> still useful to somebody.
>
> You have the basic idea for how to write a multi-subimage file using the
> ImageOutput interface, with the data just in a big array.
>
> If I understand your question correctly, you want to use ImageBufAlgo::
> crop() to crop those images to a given ROI, but now you are stuck for how to
> write a multi-image file (multi-part exr) for the resulting ImageBuf's.
>
> Here's the outline of how you would do that:
>
>
> // Start off the same way: you have your original images all in the big
> 'scratch' buffer,
> // and an array of specs.
> // Assume you want to crop them all to ROI 'cropped_roi'.
>
> // Make a new set of specs with the cropped sizes
> std::vector<ImageSpec> cropped_specs (orig_fb_count);
> for (int s = 0; s < orig_fb_count; ++s) {
> cropped_specs[s] = specs[s];
> cropped_specs[s].set_roi (cropped_roi);
> }
>
> // Open an ImageOutput for multi-subimage as you did before
> out->open (filename.toStdString(), orig_fb_count, cropped_specs.data());
>
> // Crop each individual image and write it
> unsigned int xoffset = 0;
> for (int s = 0; s < orig_fb_count; s++) {
> if (s > 0) { // Not needed for the first, which is already open
> out->open (filename.toStdString(), cropped_specs[s],
> ImageOutput::AppendSubimage);
> }
>
> // Make a light-weight ImageBuf that "wraps" your existing data.
> ImageBuf uncropped (specs[s], scratch + xoffset);
>
> // Crop it. (This will make a copy of just the cropped region.
> ImageBuf cropped = ImageBufAlgo::crop (uncropped, cropped_roi);
>
> // Write the new ImageBuf to the open file
> cropped.write (out);
>
> // Move to the next buffer position.
> xoffset += specs[s].image_bytes();
>
> // Note: the 'cropped' ImageBuf will automatically be destroyed and
> // have its memory freed when it exits scope at the end of this loop.
> }
>
>
>
>> On Jun 3, 2020, at 6:24 AM, Sven Steinbauer <[email protected]
>> <mailto:[email protected]>> wrote:
>>
>> Hello,
>>
>> I've sent an email about this before but I think my reply got lost
>> somewhere. Anyway, I am trying to crop a multi-image Exr file.
>>
>> I have managed to write out the multi-image like this (because
>> out->supports("appendsubimage") returns false)
>>
>> out->open (filename.toStdString(), orig_fb_count, specs);
>>
>> // Write the individual subimages
>> unsigned int xoffset = 0;
>> for (int s = 0; s < orig_fb_count; s++) {
>> if (s > 0) { // Not needed for the first, which is already open
>> out->open (filename.toStdString(), specs[s],
>> ImageOutput::AppendSubimage);
>> }
>> out->write_image (TypeDesc::BASETYPE(specs[s].format.basetype), scratch
>> + xoffset);
>> xoffset += specs[s].image_bytes();
>> }
>>
>> Here the scratch is a scratch file buffer storing all the aovs contiguously,
>> and the arrap of specs stores the spec for each one. This is working great,
>> but I want to add an autocrop feature.
>>
>> I can calculate the ROI (or BBox) for the overall image, but I am not sure
>> how to crop the images.
>>
>> The original code I inherited uses ImageBufAlgo::crop, and then
>> ImageBuf::write to save the file. I am not sure how to write out the result
>> from the crop to a multi-image EXR
>>
>> out->open (filename.toStdString(), orig_fb_count, specs);
>>
>>
>> What's the correct method to crop the image and write it out as a
>> multi-image EXR?
>>
>> SVEN STEINBAUER​
>> Senior R&D Engineer
>> T
>> +44 20 7287 4041
>>
>> <https://urldefense.com/v3/__http://www.themill.com/__;!!Ci6f514n9QsL8ck!0TzpJJ4BCk2WtjXxr9ysE0QK6z_F6_xYxmS1McIgOXROPOIPedwOW4TCUXIu7g$>
>> SUPPORTING WORLD PRIDE MONTH 2020
>> THE MILL 11‑14 WINDMILL STREET, LONDON, W1T 2JG
>> FOLLOW @MILLCHANNEL | FACEBOOK
>> <https://urldefense.com/v3/__http://www.facebook.com/millchannel__;!!Ci6f514n9QsL8ck!0TzpJJ4BCk2WtjXxr9ysE0QK6z_F6_xYxmS1McIgOXROPOIPedwOW4TVXRP_bw$>
>> | LINKEDIN
>> <https://urldefense.com/v3/__https://www.linkedin.com/company/9328__;!!Ci6f514n9QsL8ck!0TzpJJ4BCk2WtjXxr9ysE0QK6z_F6_xYxmS1McIgOXROPOIPedwOW4RYGusChg$>
>> | INSTAGRAM
>> <https://urldefense.com/v3/__https://www.instagram.com/millchannel__;!!Ci6f514n9QsL8ck!0TzpJJ4BCk2WtjXxr9ysE0QK6z_F6_xYxmS1McIgOXROPOIPedwOW4RmqmSbsQ$>
>>
>> |
>> THEMILL.COM
>> <https://urldefense.com/v3/__http://www.themill.com/__;!!Ci6f514n9QsL8ck!0TzpJJ4BCk2WtjXxr9ysE0QK6z_F6_xYxmS1McIgOXROPOIPedwOW4TCUXIu7g$>
>>
>> _______________________________________________
>> Oiio-dev mailing list
>> [email protected] <mailto:[email protected]>
>> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
>> <https://urldefense.com/v3/__http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org__;!!Ci6f514n9QsL8ck!0TzpJJ4BCk2WtjXxr9ysE0QK6z_F6_xYxmS1McIgOXROPOIPedwOW4QsQwaFmg$>
> --
> Larry Gritz
> [email protected] <mailto:[email protected]>
>
>
>
>
> _______________________________________________
> Oiio-dev mailing list
> [email protected] <mailto:[email protected]>
> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
> <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