📄 imfrgbafile.h
字号:
/////////////////////////////////////////////////////////////////////////////// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas// Digital Ltd. LLC// // All rights reserved.// // Redistribution and use in source and binary forms, with or without// modification, are permitted provided that the following conditions are// met:// * Redistributions of source code must retain the above copyright// notice, this list of conditions and the following disclaimer.// * Redistributions in binary form must reproduce the above// copyright notice, this list of conditions and the following disclaimer// in the documentation and/or other materials provided with the// distribution.// * Neither the name of Industrial Light & Magic nor the names of// its contributors may be used to endorse or promote products derived// from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE./////////////////////////////////////////////////////////////////////////////#ifndef INCLUDED_IMF_RGBA_FILE_H#define INCLUDED_IMF_RGBA_FILE_H//-----------------------------------------------------------------------------//// Simplified RGBA image I/O//// class RgbaOutputFile// class RgbaInputFile////-----------------------------------------------------------------------------#include <ImfHeader.h>#include <ImfFrameBuffer.h>#include <ImfRgba.h>#include "ImathVec.h"#include "ImathBox.h"#include "half.h"#include <ImfThreading.h>namespace Imf {class OutputFile;class InputFile;struct PreviewRgba;//// RGBA output file.//class RgbaOutputFile{ public: //--------------------------------------------------- // Constructor -- header is constructed by the caller //--------------------------------------------------- RgbaOutputFile (const char name[], const Header &header, RgbaChannels rgbaChannels = WRITE_RGBA, int numThreads = globalThreadCount()); //---------------------------------------------------- // Constructor -- header is constructed by the caller, // file is opened by the caller, destructor will not // automatically close the file. //---------------------------------------------------- RgbaOutputFile (OStream &os, const Header &header, RgbaChannels rgbaChannels = WRITE_RGBA, int numThreads = globalThreadCount()); //---------------------------------------------------------------- // Constructor -- header data are explicitly specified as function // call arguments (empty dataWindow means "same as displayWindow") //---------------------------------------------------------------- RgbaOutputFile (const char name[], const Imath::Box2i &displayWindow, const Imath::Box2i &dataWindow = Imath::Box2i(), RgbaChannels rgbaChannels = WRITE_RGBA, float pixelAspectRatio = 1, const Imath::V2f screenWindowCenter = Imath::V2f (0, 0), float screenWindowWidth = 1, LineOrder lineOrder = INCREASING_Y, Compression compression = PIZ_COMPRESSION, int numThreads = globalThreadCount()); //----------------------------------------------- // Constructor -- like the previous one, but both // the display window and the data window are // Box2i (V2i (0, 0), V2i (width - 1, height -1)) //----------------------------------------------- RgbaOutputFile (const char name[], int width, int height, RgbaChannels rgbaChannels = WRITE_RGBA, float pixelAspectRatio = 1, const Imath::V2f screenWindowCenter = Imath::V2f (0, 0), float screenWindowWidth = 1, LineOrder lineOrder = INCREASING_Y, Compression compression = PIZ_COMPRESSION, int numThreads = globalThreadCount()); //----------- // Destructor //----------- virtual ~RgbaOutputFile (); //------------------------------------------------ // Define a frame buffer as the pixel data source: // Pixel (x, y) is at address // // base + x * xStride + y * yStride // //------------------------------------------------ void setFrameBuffer (const Rgba *base, size_t xStride, size_t yStride); //--------------------------------------------- // Write pixel data (see class Imf::OutputFile) //--------------------------------------------- void writePixels (int numScanLines = 1); int currentScanLine () const; //-------------------------- // Access to the file header //-------------------------- const Header & header () const; const FrameBuffer & frameBuffer () const; const Imath::Box2i & displayWindow () const; const Imath::Box2i & dataWindow () const; float pixelAspectRatio () const; const Imath::V2f screenWindowCenter () const; float screenWindowWidth () const; LineOrder lineOrder () const; Compression compression () const; RgbaChannels channels () const; // -------------------------------------------------------------------- // Update the preview image (see Imf::OutputFile::updatePreviewImage()) // -------------------------------------------------------------------- void updatePreviewImage (const PreviewRgba[]); //----------------------------------------------------------------------- // Rounding control for luminance/chroma images: // // If the output file contains luminance and chroma channels (WRITE_YC // or WRITE_YCA), then the the significands of the luminance and // chroma values are rounded to roundY and roundC bits respectively (see // function half::round()). Rounding improves compression with minimal // image degradation, usually much less than the degradation caused by // chroma subsampling. By default, roundY is 7, and roundC is 5. // // If the output file contains RGB channels or a luminance channel, // without chroma, then no rounding is performed. //----------------------------------------------------------------------- void setYCRounding (unsigned int roundY, unsigned int roundC); //---------------------------------------------------- // Break a scan line -- for testing and debugging only // (see Imf::OutputFile::updatePreviewImage() // // Warning: Calling this function usually results in a // broken image file. The file or parts of it may not // be readable, or the file may contain bad data. // //---------------------------------------------------- void breakScanLine (int y, int offset, int length, char c); private: RgbaOutputFile (const RgbaOutputFile &); // not implemented RgbaOutputFile & operator = (const RgbaOutputFile &); // not implemented class ToYca; OutputFile * _outputFile; ToYca * _toYca;};//// RGBA input file//class RgbaInputFile{ public: //------------------------------------------------------- // Constructor -- opens the file with the specified name, // destructor will automatically close the file. //------------------------------------------------------- RgbaInputFile (const char name[], int numThreads = globalThreadCount()); //----------------------------------------------------------- // Constructor -- attaches the new RgbaInputFile object to a // file that has already been opened by the caller. // Destroying the RgbaInputFile object will not automatically // close the file. //----------------------------------------------------------- RgbaInputFile (IStream &is, int numThreads = globalThreadCount()); //----------- // Destructor //----------- virtual ~RgbaInputFile (); //----------------------------------------------------- // Define a frame buffer as the pixel data destination: // Pixel (x, y) is at address // // base + x * xStride + y * yStride // //----------------------------------------------------- void setFrameBuffer (Rgba *base, size_t xStride, size_t yStride); //------------------------------------------- // Read pixel data (see class Imf::InputFile) //------------------------------------------- void readPixels (int scanLine1, int scanLine2); void readPixels (int scanLine); //-------------------------- // Access to the file header //-------------------------- const Header & header () const; const FrameBuffer & frameBuffer () const; const Imath::Box2i & displayWindow () const; const Imath::Box2i & dataWindow () const; float pixelAspectRatio () const; const Imath::V2f screenWindowCenter () const; float screenWindowWidth () const; LineOrder lineOrder () const; Compression compression () const; RgbaChannels channels () const; const char * fileName () const; bool isComplete () const; //---------------------------------- // Access to the file format version //---------------------------------- int version () const; private: RgbaInputFile (const RgbaInputFile &); // not implemented RgbaInputFile & operator = (const RgbaInputFile &); // not implemented class FromYca; InputFile * _inputFile; FromYca * _fromYca;};} // namespace Imf#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -