Hm, mist, da nimmt man sich endlich mal die Zeit das zu suchen wo ich sowas schonmal gemacht hab, und dann stellt man fest, dass das auf nem andern Rechner ist, auf den man grad keinen Zugriff hat Oo
Also n Beispiel gibts jetzt wohl erstmal leider nicht, aber schon mal das Prinzip:
Du machst dir eine 1D Textur (RGB) die 256 Einträge breit ist. An jeder Position i setzt du die Farbe auf (i, i, i), nur an Position 255 setzt du die Farbe auf (255, 0, 0), also Rot (Normalerweise nimmt man halt float als Format, also statt 255 halt 1.0 etc, aber zum Verständnis ists mit ints glaub verständlicher). Das ist dann deine Lookup Table die du als 1D Textur in den Grafikspeicher lädst (glTexImage1D).
Rendern tust u ja wahrscheinlich einfach ein Quad das den Viewport ganz ausfüllt auf das du dein Bild als Textur aufklebst, das ist soweit auch gut so.
Als letztes brauchst du nur noch nen Fragmentshader, dem du die 1D Textur übergibst. Anstatt dem aktuellen Fragment einfach die entsprechende Farbe aus der 2D Textur zu geben, wie es normal wäre, setzt du die Farbe einfach auf die Farbe der 1D-Textur, wobei du als Texturkoordinate den Grauwert der Farbe aus der 2D Textur an der Stelle der eigentlichen Texturkoordinaten nimmst.
ch hoffe mal, dass das nicht zu verwirrend formuliert ist ^^")
Dann musst du einfach nurnoch vor dem rendern des Quads den Shader aktivieren und schon sollte alles Weiß durch Rot ersetzt werden.
Diese 1D-Textur ist also eine Lookuptable die eine Transferfunktion beschreibt. Du musst nur halt beachten, dass du bei der 1D-Textur Nearest Neighbour Filtering aktivierst (glTexParameteri(texID, GL_TEXTURE_MIN/MAG_FILTER, GL_NEAREST)), denn Filterung ist bei ner LUT nicht erwünscht und führt zu unerwünschten Effekten...
PS: Das hat alles nixmehr mit Qt zu tun, also guck vllt auch obs nicht doch auch ohne openGL geht. Du musst mit openGL halt zig mal pro Sekunde eine Textur in den Grafikspeicher hochladen (die alte möglicht wieder freigeben) und mit glBindTexture binden, da kommst du nicht drum rum (soweit ich weiß gibts für Texturen noch keine Möglichkeit die direkt mit der CPU zu bearbeiten wie z.B. bei VBOs), und ich kann mir einfach nicht vorstellen, dass das sonderlich effizient geht... :/