📄 imftiledrgbafile.cpp
字号:
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 + -