|
From: Andreas R. <and...@us...> - 2003-04-08 21:31:07
|
Update of /cvsroot/squeak/squeak/platforms/win32/extras/3.4.3 In directory sc8-pr-cvs1:/tmp/cvs-serv15601 Added Files: BBCompositing.cs Log Message: fix needed but not in image --- NEW FILE: BBCompositing.cs --- 'From Squeak3.4 of 1 March 2003 [latest update: #5170] on 6 April 2003 at 7:05:25 pm'! !BitBltSimulation methodsFor: 'combination rules' stamp: 'ar 4/6/2003 18:52'! alphaBlend: sourceWord with: destinationWord "Blend sourceWord with destinationWord, assuming both are 32-bit pixels. The source is assumed to have 255*alpha in the high 8 bits of each pixel, while the high 8 bits of the destinationWord will be ignored. The blend produced is alpha*source + (1-alpha)*dest, with the computation being performed independently on each color component. The high byte of the result will be 0." | alpha unAlpha colorMask result blend shift | self inline: false. alpha _ sourceWord >> 24. "High 8 bits of source pixel" alpha = 0 ifTrue: [ ^ destinationWord ]. alpha = 255 ifTrue: [ ^ sourceWord ]. unAlpha _ 255 - alpha. colorMask _ 16rFF. result _ 0. "red" shift := 0. blend := ((sourceWord >> shift bitAnd: colorMask) * alpha) + ((destinationWord>>shift bitAnd: colorMask) * unAlpha) + 254 // 255 bitAnd: colorMask. result _ result bitOr: blend << shift. "green" shift := 8. blend := ((sourceWord >> shift bitAnd: colorMask) * alpha) + ((destinationWord>>shift bitAnd: colorMask) * unAlpha) + 254 // 255 bitAnd: colorMask. result _ result bitOr: blend << shift. "blue" shift := 16. blend := ((sourceWord >> shift bitAnd: colorMask) * alpha) + ((destinationWord>>shift bitAnd: colorMask) * unAlpha) + 254 // 255 bitAnd: colorMask. result _ result bitOr: blend << shift. "alpha (pre-multiplied)" shift := 24. blend := (alpha * 255) + ((destinationWord>>shift bitAnd: colorMask) * unAlpha) + 254 // 255 bitAnd: colorMask. result _ result bitOr: blend << shift. ^ result ! ! |