I'm answering my own question.

In read_tiles() I have to use zEnd = 1 instead of 0.

Sorry for wasting your time.

haggi

Am 2019-10-08 12:30, schrieb ha...@haggi.de:
Hi,
I have a problem reading a tiled image on Windows with VisualStudio
and OIIO 2.0.8.
For testing I rendered an image with Arnold with tiled option checked
and without the tile option. While reading the scanline image works
fine, the tiled rendering does not read anything. I can see in debug
mode that the tilePixels array does not change at all before and after
reading a tile. The result of the read_tiles call is always true.

Maybe anyone can have a look and tell me if there is an obvious problem.

This is the still bit chaotic code I use.


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

                                }
                        }
                }



Thanks for any hints.

haggi
_______________________________________________
Oiio-dev mailing list
Oiio-dev@lists.openimageio.org
http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
_______________________________________________
Oiio-dev mailing list
Oiio-dev@lists.openimageio.org
http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org

Reply via email to