⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imfrgbafile.h

📁 image converter source code
💻 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 + -