It's almost exactly like the general interface examples in the distribution 
(generalInterfaceExamples.cpp -> writeGZ1 & writeGZ2), but you would put a loop 
around that whole chunk of code. Your buffers should each be the size of one 
scanline, and you need to recreate the framebuffer object for each scanline 
because you're going to pass the same pixel buffers each time but give them a 
different offset into the file. The key thing to get right is the second 
argument to the Slice() object that you pass to each call of 
framebuffer.insert(), because that is where the offset will go. That is how 
writePixels knows where to start. Perhaps the closest example of this is in the 
function "readGZ1", although that is for reading a datawindow and not writing 
scanlines.

I agree it would be nice if there were an example of this in the distribution.

-Jonathan





________________________________
From: Koraxen <kora...@gmail.com>
To: Florian Kainz <ka...@ilm.com>
Cc: openexr-devel@nongnu.org
Sent: Thu, December 10, 2009 10:34:44 AM
Subject: Re: [Openexr-devel] Writing single EXR file with very many channels?

More precisely:

generateScanline(1)
write scanline1 of channel1
write scanline1 of channel2
write scanline1 of channel3
write scanline1 of channel4
free() mem

generateScanline(2)
write scanline2 of channel1
write scanline2 of channel2
write scanline2 of channel3
write scanline2 of channel4
free() mem

.. and so forth.

The writePixels( int height ) function will write a given number of scanlines, 
but not a specific scanline?

- K.


On Thu, Dec 10, 2009 at 10:26 AM, Koraxen <kora...@gmail.com> wrote:

Thanks for the reply Florian!
>
>Do you know of any example that shows scanlines being written 1 at a time?
>
>As in:
>write scanline1 of channel1
>write scanline1 of channel2
>write scanline1 of channel3
>>write scanline1 of channel4
>free() mem
>
>write scanline2 of channel1
>write scanline2 of channel2
>write scanline2 of channel3
>write scanline2 of channel4
>free() mem
>
>...and so forth.
>
>I can find one for tiled files in the ReadingAndWritingImageFiles pdf, but not 
>for scanline.
>
>Thanks again,
>- K.
>
>
>
>
>On Wed, Dec 9, 2009 at 11:20 AM, Florian Kainz <ka...@ilm.com> wrote:
>
>>>Hi Kora,
>>
>>>>the IlmImf library does not allow writing the file channel by channel;
>>>>all channels must be written at the same time.  The OpenEXR file layout
>>>>would channel-by-channel writing very inefficient.
>>>>However, you can write a few scanlines at a time or a few tiles at a
>>>>time; your frame buffer only has to be large enough to hold the portion
>>>>of the image you are writing.  (In the extreme, a single scan line or
>>>>a single tile is enough.)
>>
>>>>Florian
>>
>>
>>>>Koraxen wrote:
>>
>>>>>Hey guys,
>>>
>>>>>>I have a question regarding how to deal memory consumption and 
>>>>>>multi-layered EXR files.
>>>
>>>>>>I need to write an EXR file that contains 10 different versions of a same 
>>>>>>high res (5120 x 2880) image. This translates into an EXR file that 
>>>>>>contains 10 layers x 4 channels = 40 channels.
>>>
>>>>>>What I am doing is:
>>>>>>1. Instantiate an exr framebuffer
>>>>>>2. Allocate memory for 40 high-res channels, and insert() them all into 
>>>>>>framebuffer
>>>>>>3. Instantiate OutputFile object, and set the framebuffer to it
>>>>>>4. Write the OutputFile
>>>
>>>>>>The problem is that host system obviously runs out of memory during step 
>>>>>>#2.
>>>
>>>>>>What's needed here is the ability to:
>>>>>>- Insert a channel to framebuffer
>>>>>>- Write it to disk
>>>>>>- Free memory
>>>>>>- Repeat 40 times
>>>>>>- End up with a *single* EXR file containing 40 channels
>>>
>>>>>>How can this be done?
>>>
>>>>>>Thanks a ton!
>>>>>>- Kora
>>>
>>>
>>>
>>>------------------------------------------------------------------------
>>>
>>>
>>>>>>_______________________________________________
>>>>>>Openexr-devel mailing list
>>>Openexr-devel@nongnu.org
>>>http://lists.nongnu.org/mailman/listinfo/openexr-devel
>>>
>>
>
_______________________________________________
Openexr-devel mailing list
Openexr-devel@nongnu.org
http://lists.nongnu.org/mailman/listinfo/openexr-devel

Reply via email to