1

VisualStudio と OIIO 2.0.8 を使用している Windows でタイル画像を読み取る際に問題があります。テストのために、Arnold でタイル オプションをオンにして、タイル オプションなしでイメージをレンダリングしました。スキャンライン イメージの読み取りは正常に機能しますが、タイル レンダリングでは何も読み取れません。デバッグ モードでは、タイルの読み取りの前後で tilePixels 配列がまったく変化しないことがわかります。read_tiles 呼び出しの結果は常に true です。

明らかな問題があるかどうか、誰でも見て教えてくれるかもしれません。

これは、私が使用するまだ混沌としたコードです。

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";

            }
        }
    }
4

1 に答える 1