gpt4 book ai didi

c++ - 如何使用 OpenImageIO 和 read_tiles() 读取平铺图像

转载 作者:行者123 更新时间:2023-11-30 04:43:26 26 4
gpt4 key购买 nike

我在使用 VisualStudio 和 OIIO 2.0.8 读取 Windows 上的平铺图像时遇到问题。为了进行测试,我使用 Arnold 渲染了一张图像,选中了平铺选项但没有平铺选项。虽然读取扫描线图像工作正常,但平铺渲染不会读取任何内容。我可以在 Debug模式下看到 tilePixels 数组在读取图 block 之前和之后根本没有变化。 read_tiles 调用的结果始终为真。

也许任何人都可以看看并告诉我是否存在明显的问题。

这是我使用的仍然有点困惑的代码。

std::string filename = "C:/daten/images/tiledRender.exr";
auto in = ImageInput::open(filename);
if (in)
{
int tw = spec.tile_width;
int th = spec.tile_height;
int w = spec.width;
int h = spec.height;
int numBytesPerPixel = 3;
size_t numBytesPerImage = w*h*numBytesPerPixel;
size_t numBytesPerLine = w*numBytesPerPixel;
std::vector<unsigned char> pixels(numBytesPerImage, 120);
unsigned char* line = &pixels[0];
unsigned char *bit = image->bits(); //this comes from QImage

if (tw == 0) // no tiles read scanlines
{
qDebug() << "Found scanline rendering.\n";
for (int i = 0; i < h; i++)
{
bool success = in->read_scanlines(0, 0, i, i+1, 0, 0, 3, TypeDesc::UCHAR, line);
if (!success)
qDebug() << "read scanline problem at scanline " << i << "\n";
line += numBytesPerLine;
}
memcpy(bit, &pixels[0], numBytesPerImage);
}
else {
qDebug() << "Found tiled rendering.\n";
int numTilePixels = tw * th;
int numBytesPerTile = numTilePixels * 3;
std::vector<unsigned char> tilePixels(numBytesPerTile, 80);
unsigned char* tilePtr = &tilePixels[0];
for (int x = 0; x < w; x += tw)
{
for (int y = 0; y < h; y += th)
{
int ttw = tw;
int tth = th;
if ((x + tw) >= w)
ttw = w - x;
if ((y + th) >= h)
tth = h - y;

bool success = in->read_tiles(0, 0, x, x+ttw, y, y+tth, 0, 0, 0, 3, TypeDesc::UCHAR, tilePtr);
if (!success)
qDebug() << "read tiles problem\n";

}
}
}

最佳答案

解决方案在于读取图 block 的方式。我必须使用 zEnd = 1,而不是读取 zStart = 0 和 zEnd = 0。

所以代替:

bool success = in->read_tiles(0, 0, x, x+ttw, y, y+tth, 0, 0, 0, 3, TypeDesc::UCHAR, tilePtr);

必须是

bool success = in->read_tiles(0, 0, x, x+ttw, y, y+tth, 0, 1, 0, 3, TypeDesc::UCHAR, tilePtr);

关于c++ - 如何使用 OpenImageIO 和 read_tiles() 读取平铺图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58285787/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com