Hi Robert,

Well, I would even try to search for it, but right now I'm so busy I'll
have to just skip it and use a hack.
But if anyone out there has a bit more time, here's a piece of code and
data to test it.

I don't remember if osg comes with the pkg-config script, but if not maybe
I added mine by hand. In that case just replace that part by the include
and lib paths.

Compile with:
c++ catpx.cpp -o catpx `PKG_CONFIG_PATH=/path/to/pkgconfig/dir pkg-config
--cflags --libs openscenegraph openthreads`

Runing with:
OSG_NOTIFY_LEVEL=debug ./catpx pixel.png

GraphicsContext::setWindowingSystemInterface() 0x10262cc30 0x10055db08
itr='/Users/paulo/usr/lib'
FindFileInPath() : trying
/Users/paulo/usr/lib/osgPlugins-3.0.0/osgdb_imageio.so ...
FindFileInPath() : USING
/Users/paulo/usr/lib/osgPlugins-3.0.0/osgdb_imageio.so
Opened DynamicLibrary osgPlugins-3.0.0/osgdb_imageio.so
FindFileInPath(pixel.png): returning pixel.png
imageio readImageFile: pixel.png
0 0 0 0
GraphicsContext::setWindowingSystemInterface() 0 0x10055db08

So the plugin used is imageio and the result should be:
64 128 192 0

Somewhere in the loading some sort of alpha pre-multiplying is going on.

:/
#include <osgDB/ReadFile>
#include <osg/ref_ptr>
#include <iostream>
#include <cassert>

typedef unsigned char byte;

struct Pixel {
    byte c0;
    byte c1;
    byte c2;
    byte alpha;
};

typedef osg::ref_ptr<osg::Image> ImagePtr;


int main(int n, char** c) {
    if(n == 1) {
        std::cout << "Usage: " << c[0] << " image.png" << std::endl;
        return 0;
    }

    const ImagePtr img(osgDB::readImageFile(c[1]));

    if(img == 0) {
        std::cout << "Failed to load: " << c[1] << std::endl;
        return 1;
    }

    const GLenum pxf(img->getPixelFormat());

    if(not (pxf == GL_RGBA or pxf == GL_BGRA)) {
        std::cout << "Image must be RGBA or BGRA, found: "
                  << pxf << std::endl;
        return 1;
    }

    const Pixel* const px(reinterpret_cast<const Pixel*>(img->data()));

    std::cout   << unsigned(px->c0) << ' '
                << unsigned(px->c1) << ' '
                << unsigned(px->c2) << ' '
                << unsigned(px->alpha) << std::endl;

    return 0;
}

<<attachment: pixel.png>>

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

Reply via email to