Code archives/Graphics/DrawAlphaImage
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
Either uses the blue channel of the supplied image or an optional alpha image to blit an image to the current buffer. Now supports clipping. | |||||
; drawalphaimage.bb ; by simon@acid.co.nz image=LoadImage("test.bmp") For i=0 To 100 Step 10 DrawAlphaImage(image,i,i) Next MouseWait End Function DrawAlphaImage(image,px,py,alphaimage=0) If alphaimage=0 alphaimage=image ; size w=ImageWidth(image) h=ImageHeight(image) gw=GraphicsWidth() gh=GraphicsWidth() ; clip x0=px:y0=py If x0<0 w=w+x0 x0=0 If y0<0 h=h+y0 y0=0 If x0+w>gw w=gw-x0 If y0+h>gh h=gh-y0 If w<=0 Or h<=0 Return x1=x0+w-1 y1=y0+h-1 ; lock buffers ibuffer=ImageBuffer(image) abuffer=ImageBuffer(alphaimage) gbuffer=GraphicsBuffer() LockBuffer ibuffer LockBuffer abuffer LockBuffer gbuffer ; draw For y=y0 To y1 For x=x0 To x1 alpha=ReadPixelFast(x-px,y-py,abuffer) And 255 If alpha>1 rgb0=ReadPixelFast(x-px,y-py,ibuffer) rgb1=ReadPixelFast(x,y,gbuffer) bit=$80 rgb=0 While bit>1 rgb0=(rgb0 Shr 1) And $7f7f7f rgb1=(rgb1 Shr 1) And $7f7f7f If (alpha And bit) rgb=rgb+rgb0 Else rgb=rgb+rgb1 bit=bit Shr 1 Wend WritePixelFast x,y,rgb EndIf Next Next ; unlock UnlockBuffer gbuffer UnlockBuffer ibuffer UnlockBuffer abuffer End Function |
Comments
None.
Code Archives Forum