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

📄 imftiledrgbafile.cpp

📁 image converter source code
💻 CPP
📖 第 1 页 / 共 2 页
字号:
TiledRgbaOutputFile::numYTiles (int ly) const{     return _outputFile->numYTiles (ly);}Imath::Box2iTiledRgbaOutputFile::dataWindowForLevel (int l) const{     return _outputFile->dataWindowForLevel (l);}Imath::Box2iTiledRgbaOutputFile::dataWindowForLevel (int lx, int ly) const{     return _outputFile->dataWindowForLevel (lx, ly);}Imath::Box2iTiledRgbaOutputFile::dataWindowForTile (int dx, int dy, int l) const{     return _outputFile->dataWindowForTile (dx, dy, l);}Imath::Box2iTiledRgbaOutputFile::dataWindowForTile (int dx, int dy, int lx, int ly) const{     return _outputFile->dataWindowForTile (dx, dy, lx, ly);}voidTiledRgbaOutputFile::writeTile (int dx, int dy, int l){    if (_toYa)    {	Lock lock (*_toYa);	_toYa->writeTile (dx, dy, l, l);    }    else    {	 _outputFile->writeTile (dx, dy, l);    }}voidTiledRgbaOutputFile::writeTile (int dx, int dy, int lx, int ly){    if (_toYa)    {	Lock lock (*_toYa);	_toYa->writeTile (dx, dy, lx, ly);    }    else    {	 _outputFile->writeTile (dx, dy, lx, ly);    }}void	TiledRgbaOutputFile::writeTiles    (int dxMin, int dxMax, int dyMin, int dyMax, int lx, int ly){    if (_toYa)    {	Lock lock (*_toYa);        for (int dy = dyMin; dy <= dyMax; dy++)            for (int dx = dxMin; dx <= dxMax; dx++)	        _toYa->writeTile (dx, dy, lx, ly);    }    else    {        _outputFile->writeTiles (dxMin, dxMax, dyMin, dyMax, lx, ly);    }}void	TiledRgbaOutputFile::writeTiles    (int dxMin, int dxMax, int dyMin, int dyMax, int l){    writeTiles (dxMin, dxMax, dyMin, dyMax, l, l);}class TiledRgbaInputFile::FromYa: public Mutex{  public:     FromYa (TiledInputFile &inputFile);     void	setFrameBuffer (Rgba *base,				size_t xStride,				size_t yStride);     void	readTile (int dx, int dy, int lx, int ly);  private:     TiledInputFile &	_inputFile;     unsigned int	_tileXSize;     unsigned int	_tileYSize;     V3f		_yw;     Array2D <Rgba>	_buf;     Rgba *		_fbBase;     size_t		_fbXStride;     size_t		_fbYStride;};TiledRgbaInputFile::FromYa::FromYa (TiledInputFile &inputFile):    _inputFile (inputFile){    const TileDescription &td = inputFile.header().tileDescription();    _tileXSize = td.xSize;    _tileYSize = td.ySize;    _yw = ywFromHeader (_inputFile.header());    _buf.resizeErase (_tileYSize, _tileXSize);    _fbBase = 0;    _fbXStride = 0;    _fbYStride = 0;}voidTiledRgbaInputFile::FromYa::setFrameBuffer (Rgba *base,					    size_t xStride,					    size_t yStride){    _fbBase = base;    _fbXStride = xStride;    _fbYStride = yStride;}voidTiledRgbaInputFile::FromYa::readTile (int dx, int dy, int lx, int ly){    if (_fbBase == 0)    {	THROW (Iex::ArgExc, "No frame buffer was specified as the "			    "pixel data destination for image file "			    "\"" << _inputFile.fileName() << "\".");    }    //    // Read the tile requiested by the caller into _buf.    //        Box2i dw = _inputFile.dataWindowForTile (dx, dy, lx, ly);    FrameBuffer fb;    fb.insert ("Y", Slice (HALF,				   // type			   (char *) &_buf[-dw.min.y][-dw.min.x].g, // base			   sizeof (Rgba),			   // xStride			   sizeof (Rgba) * _tileXSize));	   // yStride    fb.insert ("A", Slice (HALF,				   // type			   (char *) &_buf[-dw.min.y][-dw.min.x].a, // base			   sizeof (Rgba),			   // xStride			   sizeof (Rgba) * _tileXSize,		   // yStride			   1, 1,				   // sampling			   1.0));				   // fillValue    _inputFile.setFrameBuffer (fb);    _inputFile.readTile (dx, dy, lx, ly);    //    // Convert the luminance/alpha pixels to RGBA    // and copy them into the caller's frame buffer.    //    int width = dw.max.x - dw.min.x + 1;    for (int y = dw.min.y, y1 = 0; y <= dw.max.y; ++y, ++y1)    {	for (int x1 = 0; x1 < width; ++x1)	{	    _buf[y1][x1].r = 0;	    _buf[y1][x1].b = 0;	}	YCAtoRGBA (_yw, width, _buf[y1], _buf[y1]);	for (int x = dw.min.x, x1 = 0; x <= dw.max.x; ++x, ++x1)	{	    _fbBase[x * _fbXStride + y * _fbYStride] = _buf[y1][x1];	}    }}TiledRgbaInputFile::TiledRgbaInputFile (const char name[], int numThreads):    _inputFile (new TiledInputFile (name, numThreads)),    _fromYa (0){    if (channels() & WRITE_Y)	_fromYa = new FromYa (*_inputFile);}TiledRgbaInputFile::TiledRgbaInputFile (IStream &is, int numThreads):    _inputFile (new TiledInputFile (is, numThreads)),    _fromYa (0){    if (channels() & WRITE_Y)	_fromYa = new FromYa (*_inputFile);}TiledRgbaInputFile::~TiledRgbaInputFile (){    delete _inputFile;    delete _fromYa;}void	TiledRgbaInputFile::setFrameBuffer (Rgba *base, size_t xStride, size_t yStride){    if (_fromYa)    {	Lock lock (*_fromYa);	_fromYa->setFrameBuffer (base, xStride, yStride);    }    else    {	size_t xs = xStride * sizeof (Rgba);	size_t ys = yStride * sizeof (Rgba);	FrameBuffer fb;	fb.insert ("R", Slice (HALF,			       (char *) &base[0].r,			       xs, ys,			       1, 1,	// xSampling, ySampling			       0.0));	// fillValue	fb.insert ("G", Slice (HALF,			       (char *) &base[0].g,			       xs, ys,			       1, 1,	// xSampling, ySampling			       0.0));	// fillValue	fb.insert ("B", Slice (HALF,			       (char *) &base[0].b,			       xs, ys,			       1, 1,	// xSampling, ySampling			       0.0));	// fillValue	fb.insert ("A", Slice (HALF,			       (char *) &base[0].a,			       xs, ys,			       1, 1,	// xSampling, ySampling			       1.0));	// fillValue	_inputFile->setFrameBuffer (fb);    }}const Header &TiledRgbaInputFile::header () const{    return _inputFile->header();}const char *TiledRgbaInputFile::fileName () const{    return _inputFile->fileName();}const FrameBuffer &	TiledRgbaInputFile::frameBuffer () const{    return _inputFile->frameBuffer();}const Imath::Box2i &TiledRgbaInputFile::displayWindow () const{    return _inputFile->header().displayWindow();}const Imath::Box2i &TiledRgbaInputFile::dataWindow () const{    return _inputFile->header().dataWindow();}float	TiledRgbaInputFile::pixelAspectRatio () const{    return _inputFile->header().pixelAspectRatio();}const Imath::V2f	TiledRgbaInputFile::screenWindowCenter () const{    return _inputFile->header().screenWindowCenter();}float	TiledRgbaInputFile::screenWindowWidth () const{    return _inputFile->header().screenWindowWidth();}LineOrderTiledRgbaInputFile::lineOrder () const{    return _inputFile->header().lineOrder();}CompressionTiledRgbaInputFile::compression () const{    return _inputFile->header().compression();}RgbaChannels	TiledRgbaInputFile::channels () const{    return rgbaChannels (_inputFile->header().channels());}intTiledRgbaInputFile::version () const{    return _inputFile->version();}boolTiledRgbaInputFile::isComplete () const{    return _inputFile->isComplete();}unsigned intTiledRgbaInputFile::tileXSize () const{     return _inputFile->tileXSize();}unsigned intTiledRgbaInputFile::tileYSize () const{     return _inputFile->tileYSize();}LevelModeTiledRgbaInputFile::levelMode () const{     return _inputFile->levelMode();}LevelRoundingModeTiledRgbaInputFile::levelRoundingMode () const{     return _inputFile->levelRoundingMode();}intTiledRgbaInputFile::numLevels () const{     return _inputFile->numLevels();}intTiledRgbaInputFile::numXLevels () const{     return _inputFile->numXLevels();}intTiledRgbaInputFile::numYLevels () const{     return _inputFile->numYLevels();}boolTiledRgbaInputFile::isValidLevel (int lx, int ly) const{    return _inputFile->isValidLevel (lx, ly);}intTiledRgbaInputFile::levelWidth (int lx) const{     return _inputFile->levelWidth (lx);}intTiledRgbaInputFile::levelHeight (int ly) const{     return _inputFile->levelHeight (ly);}intTiledRgbaInputFile::numXTiles (int lx) const{     return _inputFile->numXTiles(lx);}intTiledRgbaInputFile::numYTiles (int ly) const{     return _inputFile->numYTiles(ly);}Imath::Box2iTiledRgbaInputFile::dataWindowForLevel (int l) const{     return _inputFile->dataWindowForLevel (l);}Imath::Box2iTiledRgbaInputFile::dataWindowForLevel (int lx, int ly) const{     return _inputFile->dataWindowForLevel (lx, ly);}Imath::Box2iTiledRgbaInputFile::dataWindowForTile (int dx, int dy, int l) const{     return _inputFile->dataWindowForTile (dx, dy, l);}Imath::Box2iTiledRgbaInputFile::dataWindowForTile (int dx, int dy, int lx, int ly) const{     return _inputFile->dataWindowForTile (dx, dy, lx, ly);}voidTiledRgbaInputFile::readTile (int dx, int dy, int l){    if (_fromYa)    {	Lock lock (*_fromYa);	_fromYa->readTile (dx, dy, l, l);    }    else    {	 _inputFile->readTile (dx, dy, l);    }}voidTiledRgbaInputFile::readTile (int dx, int dy, int lx, int ly){    if (_fromYa)    {	Lock lock (*_fromYa);	_fromYa->readTile (dx, dy, lx, ly);    }    else    {	 _inputFile->readTile (dx, dy, lx, ly);    }}void	TiledRgbaInputFile::readTiles (int dxMin, int dxMax, int dyMin, int dyMax,                               int lx, int ly){    if (_fromYa)    {	Lock lock (*_fromYa);        for (int dy = dyMin; dy <= dyMax; dy++)            for (int dx = dxMin; dx <= dxMax; dx++)	        _fromYa->readTile (dx, dy, lx, ly);    }    else    {        _inputFile->readTiles (dxMin, dxMax, dyMin, dyMax, lx, ly);    }}void	TiledRgbaInputFile::readTiles (int dxMin, int dxMax, int dyMin, int dyMax,                               int l){    readTiles (dxMin, dxMax, dyMin, dyMax, l, l);}void		TiledRgbaOutputFile::updatePreviewImage (const PreviewRgba newPixels[]){    _outputFile->updatePreviewImage (newPixels);}void	TiledRgbaOutputFile::breakTile  (int dx, int dy, int lx, int ly,				 int offset, int length, char c){    _outputFile->breakTile (dx, dy, lx, ly, offset, length, c);}} // namespace Imf

⌨️ 快捷键说明

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