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

📄 imfcrgbafile.cpp

📁 image converter source code
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/////////////////////////////////////////////////////////////////////////////// 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.///////////////////////////////////////////////////////////////////////////////-----------------------------------------------------------------------------////	C interface to C++ classes Imf::RgbaOutputFile and Imf::RgbaInputFile////-----------------------------------------------------------------------------#include <ImfCRgbaFile.h>#include <ImfRgbaFile.h>#include <ImfTiledRgbaFile.h>#include <ImfIntAttribute.h>#include <ImfFloatAttribute.h>#include <ImfDoubleAttribute.h>#include <ImfStringAttribute.h>#include <ImfBoxAttribute.h>#include <ImfVecAttribute.h>#include <ImfMatrixAttribute.h>#include <ImfChannelList.h>#include <ImfLut.h>#include "half.h"#include <string.h>using Imath::Box2i;using Imath::Box2f;using Imath::V2i;using Imath::V2f;using Imath::V3i;using Imath::V3f;using Imath::M33f;using Imath::M44f;namespace {const int MAX_ERR_LENGTH = 1024;char errorMessage[MAX_ERR_LENGTH];voidsetErrorMessage (const std::exception &e){    strncpy (errorMessage, e.what(), MAX_ERR_LENGTH - 1);    errorMessage[MAX_ERR_LENGTH - 1] = 0;}inline Imf::Header *header (ImfHeader *hdr){    return (Imf::Header *)(hdr);}inline const Imf::Header *header (const ImfHeader *hdr){    return (const Imf::Header *)(hdr);}inline Imf::RgbaOutputFile *outfile (ImfOutputFile *out){    return (Imf::RgbaOutputFile *) out;}inline const Imf::RgbaOutputFile *outfile (const ImfOutputFile *out){    return (const Imf::RgbaOutputFile *) out;}inline Imf::TiledRgbaOutputFile *outfile (ImfTiledOutputFile *out){    return (Imf::TiledRgbaOutputFile *) out;}inline const Imf::TiledRgbaOutputFile *outfile (const ImfTiledOutputFile *out){    return (const Imf::TiledRgbaOutputFile *) out;}inline Imf::RgbaInputFile *infile (ImfInputFile *in){    return (Imf::RgbaInputFile *) in;}inline const Imf::RgbaInputFile *infile (const ImfInputFile *in){    return (const Imf::RgbaInputFile *) in;}inline Imf::TiledRgbaInputFile *infile (ImfTiledInputFile *in){    return (Imf::TiledRgbaInputFile *) in;}inline const Imf::TiledRgbaInputFile *infile (const ImfTiledInputFile *in){    return (const Imf::TiledRgbaInputFile *) in;}} // namespacevoid	ImfFloatToHalf (float f, ImfHalf *h){    *h = half(f).bits();}void	ImfFloatToHalfArray (int n, const float f[/*n*/], ImfHalf h[/*n*/]){    for (int i = 0; i < n; ++i)	h[i] = half(f[i]).bits();}float	ImfHalfToFloat (ImfHalf h){    return float (*((half *)&h));}voidImfHalfToFloatArray (int n, const ImfHalf h[/*n*/], float f[/*n*/]){    for (int i = 0; i < n; ++i)	f[i] = float (*((half *)(h + i)));}ImfHeader *ImfNewHeader (void){    try    {	return (ImfHeader *) new Imf::Header;    }    catch (const std::exception &e)    {	setErrorMessage (e);	return 0;    }}void	ImfDeleteHeader (ImfHeader *hdr){    delete header (hdr);}ImfHeader *ImfCopyHeader (const ImfHeader *hdr){    try    {	return (ImfHeader *) new Imf::Header (*header (hdr));    }    catch (const std::exception &e)    {	setErrorMessage (e);	return 0;    }}void	ImfHeaderSetDisplayWindow (ImfHeader *hdr,			   int xMin, int yMin,			   int xMax, int yMax){    header(hdr)->displayWindow() = Box2i (V2i (xMin, yMin), V2i (xMax, yMax));}void	ImfHeaderDisplayWindow (const ImfHeader *hdr,			int *xMin, int *yMin,			int *xMax, int *yMax){    const Box2i dw = header(hdr)->displayWindow();    *xMin = dw.min.x;    *yMin = dw.min.y;    *xMax = dw.max.x;    *yMax = dw.max.y;}voidImfHeaderSetDataWindow (ImfHeader *hdr,			int xMin, int yMin,			int xMax, int yMax){    header(hdr)->dataWindow() = Box2i (V2i (xMin, yMin), V2i (xMax, yMax));}void	ImfHeaderDataWindow (const ImfHeader *hdr,		     int *xMin, int *yMin,		     int *xMax, int *yMax){    const Box2i dw = header(hdr)->dataWindow();    *xMin = dw.min.x;    *yMin = dw.min.y;    *xMax = dw.max.x;    *yMax = dw.max.y;}void	ImfHeaderSetPixelAspectRatio (ImfHeader *hdr, float pixelAspectRatio){    header(hdr)->pixelAspectRatio() = pixelAspectRatio;}float	ImfHeaderPixelAspectRatio (const ImfHeader *hdr){    return header(hdr)->pixelAspectRatio();}void	ImfHeaderSetScreenWindowCenter (ImfHeader *hdr, float x, float y){    header(hdr)->screenWindowCenter() = V2f (x, y);}void	ImfHeaderScreenWindowCenter (const ImfHeader *hdr, float *x, float *y){    const V2i &swc = header(hdr)->screenWindowCenter();    *x = swc.x;    *y = swc.y;}void	ImfHeaderSetScreenWindowWidth (ImfHeader *hdr, float width){    header(hdr)->screenWindowWidth() = width;}float	ImfHeaderScreenWindowWidth (const ImfHeader *hdr){    return header(hdr)->screenWindowWidth();}void	ImfHeaderSetLineOrder (ImfHeader *hdr, int lineOrder){    header(hdr)->lineOrder() = Imf::LineOrder (lineOrder);}int	ImfHeaderLineOrder (const ImfHeader *hdr){    return header(hdr)->lineOrder();}			    void	ImfHeaderSetCompression (ImfHeader *hdr, int compression){    header(hdr)->compression() = Imf::Compression (compression);}int	ImfHeaderCompression (const ImfHeader *hdr){    return header(hdr)->compression();}int	ImfHeaderSetIntAttribute (ImfHeader *hdr, const char name[], int value){    try    {	if (header(hdr)->find(name) == header(hdr)->end())	{	    header(hdr)->insert (name, Imf::IntAttribute (value));	}	else	{	    header(hdr)->typedAttribute<Imf::IntAttribute>(name).value() =		value;	}	return 1;    }    catch (const std::exception &e)    {	setErrorMessage (e);	return 0;    }}int	ImfHeaderIntAttribute (const ImfHeader *hdr, const char name[], int *value){    try    {	*value = header(hdr)->typedAttribute<Imf::IntAttribute>(name).value();	return 1;    }    catch (const std::exception &e)    {	setErrorMessage (e);	return 0;    }}int	ImfHeaderSetFloatAttribute (ImfHeader *hdr, const char name[], float value){    try    {	if (header(hdr)->find(name) == header(hdr)->end())	{	    header(hdr)->insert (name, Imf::FloatAttribute (value));	}	else	{	    header(hdr)->typedAttribute<Imf::FloatAttribute>(name).value() =		value;	}	return 1;    }    catch (const std::exception &e)    {	setErrorMessage (e);	return 0;    }}int	ImfHeaderSetDoubleAttribute (ImfHeader *hdr, const char name[], double value){    try    {	if (header(hdr)->find(name) == header(hdr)->end())	{	    header(hdr)->insert (name, Imf::DoubleAttribute (value));	}	else	{	    header(hdr)->typedAttribute<Imf::DoubleAttribute>(name).value() =		value;	}	return 1;    }    catch (const std::exception &e)    {	setErrorMessage (e);	return 0;    }}intImfHeaderFloatAttribute (const ImfHeader *hdr, const char name[], float *value){    try    {	*value = header(hdr)->typedAttribute<Imf::FloatAttribute>(name).value();	return 1;    }    catch (const std::exception &e)    {	setErrorMessage (e);	return 0;    }}intImfHeaderDoubleAttribute (const ImfHeader *hdr,			  const char name[],			  double *value){    try    {	*value = header(hdr)->	    typedAttribute<Imf::DoubleAttribute>(name).value();	return 1;    }    catch (const std::exception &e)    {	setErrorMessage (e);	return 0;    }}intImfHeaderSetStringAttribute (ImfHeader *hdr,			     const char name[],			     const char value[]){    try    {	if (header(hdr)->find(name) == header(hdr)->end())	{	    header(hdr)->insert (name, Imf::StringAttribute (value));	}	else	{	    header(hdr)->typedAttribute<Imf::StringAttribute>(name).value() =		value;	}	return 1;    }    catch (const std::exception &e)    {	setErrorMessage (e);	return 0;    }}intImfHeaderStringAttribute (const ImfHeader *hdr,			  const char name[],			  const char **value){    try    {	*value = header(hdr)->	    typedAttribute<Imf::StringAttribute>(name).value().c_str();	return 1;    }    catch (const std::exception &e)    {	setErrorMessage (e);	return 0;    }}intImfHeaderSetBox2iAttribute (ImfHeader *hdr,			    const char name[],			    int xMin, int yMin,			    int xMax, int yMax){    try    {	Box2i box (V2i (xMin, yMin), V2i (xMax, yMax));	if (header(hdr)->find(name) == header(hdr)->end())	{	    header(hdr)->insert (name, Imf::Box2iAttribute (box));	}	else	{	    header(hdr)->typedAttribute<Imf::Box2iAttribute>(name).value() =		box;	}	return 1;    }    catch (const std::exception &e)    {	setErrorMessage (e);	return 0;    }}intImfHeaderBox2iAttribute (const ImfHeader *hdr,			 const char name[],			 int *xMin, int *yMin,			 int *xMax, int *yMax){    try    {	const Box2i &box =	    header(hdr)->typedAttribute<Imf::Box2iAttribute>(name).value();	*xMin = box.min.x;	*yMin = box.min.y;	*xMax = box.max.x;	*yMax = box.max.y;	return 1;    }    catch (const std::exception &e)    {	setErrorMessage (e);	return 0;    }}intImfHeaderSetBox2fAttribute (ImfHeader *hdr,			    const char name[],			    float xMin, float yMin,			    float xMax, float yMax){    try    {	Box2f box (V2f (xMin, yMin), V2f (xMax, yMax));	if (header(hdr)->find(name) == header(hdr)->end())	{	    header(hdr)->insert (name, Imf::Box2fAttribute (box));	}	else	{	    header(hdr)->typedAttribute<Imf::Box2fAttribute>(name).value() =		box;	}	return 1;    }    catch (const std::exception &e)    {	setErrorMessage (e);	return 0;    }}intImfHeaderBox2fAttribute (const ImfHeader *hdr,			 const char name[],			 float *xMin, float *yMin,			 float *xMax, float *yMax){    try    {	const Box2f &box =	    header(hdr)->typedAttribute<Imf::Box2fAttribute>(name).value();	*xMin = box.min.x;	*yMin = box.min.y;	*xMax = box.max.x;	*yMax = box.max.y;	return 1;    }    catch (const std::exception &e)    {	setErrorMessage (e);	return 0;    }}intImfHeaderSetV2iAttribute (ImfHeader *hdr,			  const char name[],			  int x, int y){    try    {	V2i v (x, y);	if (header(hdr)->find(name) == header(hdr)->end())	    header(hdr)->insert (name, Imf::V2iAttribute (v));	else	    header(hdr)->typedAttribute<Imf::V2iAttribute>(name).value() = v;	return 1;    }    catch (const std::exception &e)    {	setErrorMessage (e);	return 0;    }}intImfHeaderV2iAttribute (const ImfHeader *hdr,		       const char name[],		       int *x, int *y){    try    {	const V2i &v =	    header(hdr)->typedAttribute<Imf::V2iAttribute>(name).value();	*x = v.x;	*y = v.y;	return 1;    }    catch (const std::exception &e)    {	setErrorMessage (e);	return 0;    }}int	ImfHeaderSetV2fAttribute (ImfHeader *hdr,			  const char name[],			  float x, float y){    try    {	V2f v (x, y);	if (header(hdr)->find(name) == header(hdr)->end())	    header(hdr)->insert (name, Imf::V2fAttribute (v));	else	    header(hdr)->typedAttribute<Imf::V2fAttribute>(name).value() = v;	return 1;    }    catch (const std::exception &e)    {	setErrorMessage (e);	return 0;    }}intImfHeaderV2fAttribute (const ImfHeader *hdr,		       const char name[],		       float *x, float *y){    try    {	const V2f &v =	    header(hdr)->typedAttribute<Imf::V2fAttribute>(name).value();	*x = v.x;	*y = v.y;	return 1;    }    catch (const std::exception &e)    {	setErrorMessage (e);	return 0;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -