Liste der Anhänge anzeigen (Anzahl: 2)
[C++] Blending Mode (Softlight) in R5G6B5
Guten Tag, 3 Augen sehen mehr als zwei. Vielleicht könnt ihr ja etwas sehen, dass ich in meinem baumlosen Wald nicht sehe.
Ich versuche das photoshoppsche Softlight-Blending in einem DynRPg-Plugin für den RPG-Maker einzubauen. Das Ergebnis sieht eher aus wie Hardlight statt Softlight.
http://www.pegtop.net/delphi/article.../softlight.htm
http://www.pegtop.net/delphi/article.../hardlight.htm
Mein Ergebnis: ( Edit: Bild nicht mehr aktuell, Bug gefixt. )
Anhang 17194
Die Formeln hab ich von hier:
http://stackoverflow.com/questions/5...mages-together
Im Fall von Softlight:
// ChannelBlend_SoftLight(A,B) ((uint8)((B < 128)?(2*((A>>1)+64))*((float)B/255):(255-(2*(255-((A>>1)+64))*(float)(255-B)/255))))
Hierbei wird davon ausgegangen, dass jeder Kanal 8Bit Farbtiefe hat, der Wertebereich liegt daher bei 0 bis 255.
Für den RPG Maker brauche ich R5G6B5-Format. D.h. rot und blau haben 5 bit, grün hat 6 Bit. Die maximalen Werte sind als 31 für rot und blau und 63 für grün.
In der Originalformel sind die Werte 128 und 64 verwendet, also 255+1 / 2 oder auch 4~ ich verwendet als anstatt diesen Werten dann die Hälfte oder ein Viertel von 31+1(rb) bzw. 63+1(g).
Code:
rPix = (src >> 11) ;
gPix = (src & 0x07E0) >> 5;
bPix = (src & 0x001F) ;
r = (unsigned char) (( imgData->r[iPtr] < 16 ) ?
( (2* (( imgData->r[iPtr] >>1) + 8 )) *((float) rPix /31) ) :
( 31-(2*(31-(( imgData->r[iPtr] >>1) +8 ))*(float)( 31 - rPix )/31 ) ) ) ;
g = (unsigned char) (( imgData->g[iPtr] < 32 ) ?
( (2* (( imgData->g[iPtr] >>1)+ 16 )) *((float) gPix /63) ) :
( 63-(2*(63-(( imgData->g[iPtr] >>1)+16 ))*(float)( 63 - gPix )/63) ) ) ;
b = (unsigned char) (( imgData->b[iPtr] < 16 ) ?
( (2* (( imgData->b[iPtr] >>1) + 8 )) *((float) bPix/31) ) :
( 31-(2*(31-(( imgData->b[iPtr] >>1)+8 ))*(float)( 31 - bPix )/31 ) ) ) ;
r = std::min(31, (int)r);
g = std::min(63, (int)g);
b = std::min(31, (int)b);
Nachtrag:
Softlight ist ähnlich Overlay und Hardlight ist Overlay mit vertauschen Quelle/Ziel-Pixel. Wenn ich die Pixel der beiden Bildquellen vertausche kommt das hier aus:
Anhang 17195
Sieht dem Softlight ähnlicher. (oh... Fehlerfixel )
Gibt es Grafikprogramme, die Blending in R5G6B5 machen können, so dass ich einen Vergleich in gleichem Farbraum habe?
Edit: Oh crap, 33 statt 31~, dadurch kamen die Fehlerpixel.
Status:
Es funktioniert, allerdings sieht es nicht ganz aus wie es das müsste. Ich weiss dabei nicht, ob es meine Fehlimplementierung ist oder aufgrund der viel gröberen Zahlenwerte passiert.