Hi,

i just implemented my own resize method. 


Code:

osg::Image* getSubImage(osg::Image* sourceImage, int startX, int startY,int 
stopX, int stopY) {


        int subImageWidth = stopX - startX;
        int subImageHeight = stopY - startY;
        if(subImageWidth<=0 || subImageHeight<=0)
        {
                osg::notify(osg::ALWAYS) << "Error the subimage size is not 
correct. Aborting.";
                return NULL;
        }

        std::cout << "Size: " << sourceImage->s() << "x" << sourceImage->s()
                        << std::endl;
        std::cout << "SubImageSize: " << subImageWidth << "x" << subImageHeight
                        << std::endl;
        std::cout << "Channels: " << sourceImage->r() << std::endl;
        const unsigned char *sourceData = sourceImage->data();
        struct pixelStruct {
                unsigned char r, g, b;
        };

        osg::Image* subImage = new osg::Image();

        // allocate memory for image data
        const unsigned char *targetData = new unsigned char[subImageWidth
                        * subImageHeight * 3];

        struct pixelStruct* pPixelSource = (struct pixelStruct *) (sourceData);
        struct pixelStruct* pPixelTarget = (struct pixelStruct *) (targetData);
        struct pixelStruct* pCurrentPixelSource = NULL;
        struct pixelStruct* pCurrentPixelTarget = NULL;

        int subX = 0;
        int subY = 0;
        for (int x = startX; x < stopX; x++) {
                for (int y = startY; y < stopY; y++) {

                        std::cout << "Source Pixel [" << x << "][" << y << "]" 
<< std::endl;
                        std::cout << "Target Pixel [" << subX << "][" << subY 
<< "]"
                                        << std::endl;
                        pCurrentPixelSource = &pPixelSource[y * 
sourceImage->s() + x];
                        pCurrentPixelTarget = &pPixelTarget[subY * 
subImageWidth + subX];

                        pCurrentPixelTarget->r = pCurrentPixelSource->r;
                        pCurrentPixelTarget->g = pCurrentPixelSource->g;
                        pCurrentPixelTarget->b = pCurrentPixelSource->b;

                        subY++;
                }
                subY=0;
                subX++;
        }

        subImage->setImage(subImageWidth, subImageHeight, sourceImage->r(),
                        sourceImage->getInternalTextureFormat(),
                        sourceImage->getPixelFormat(), 5121, (unsigned char*) 
targetData,
                        osg::Image::NO_DELETE);

        return subImage;

}




Greetings

Johannes

------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=18361#18361





_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to