Code archives/Graphics/Blur a pixmap
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
An adaptation of my old B+ routine to work with BlitzMax This example will loop and progressively blur / unblur a pixmap. Note that it cycles through each pixel in the pixmap, so it needs a moderately fast computer for best results. | |||||
' Blur -- Horizontal And Vertical Blur routines ' By Marc van den Dikkenberg / xlsior ' ' Original Release 11/23/2003 ' BlitzMax Converison 09/30/2007 ' ' Usage: HorizontalBlur(perct#) ' Verticalblur(perct#) ' perct# is the level of the effect, And expects a value between 50 And 99. ' ' The color value of a pixel is smeared onto its neighbours - the higher the ' value, the more it gets smeared. ' ' To get a bi-directional blur effect, simply call the horizontal And Vertical ' blur functions directly after each other, before performing a 'flip' operation. ' ' Tidbit: These two functions were created entirely by accident. I was working ' on my Monochrome() Function when I accidentally forgot to declare a set of ' placeholder variables, And color information accidentally got passed on To ' the Next pixel. Oh, well - maybe someone can use them. Graphics 640,480,32 pimg:TPixmap=LoadPixmap("j:\monkey4.jpg") dimg:TPixmap=CreatePixmap(640,480,PF_RGB888) Repeat DrawPixmap(pimg:TPixmap,0,0) For t=50 To 98 Step 2 HorizontalBlur(pimg:TPixmap,dimg:TPixmap,t) VerticalBlur(dimg:TPixmap,dimg:TPixmap,t) DrawPixmap dimg,0,0 Flip If KeyDown(key_escape) Then End Next For t=98 To 50 Step -2 HorizontalBlur(pimg:TPixmap,dimg:TPixmap,t) VerticalBlur(dimg:TPixmap,dimg:TPixmap,t) DrawPixmap dimg,0,0 Flip If KeyDown(key_escape) Then End Next Forever Function HorizontalBlur(PixIn:TPixmap, PixOut:TPixmap,perct#) desr=0 desg=0 desb=0 If perct#<50 Then perct#=50 If perct#>99 Then perct#=99 For y=0 To pixin.height-1 For x=0 To pixin.width-1 temp1=ReadPixel(PixIn:TPixmap,x,y) orgb=(temp1 & $FF) orgg=(temp1 & $FF00) Shr 8 orgr=(temp1 & $FF0000) Shr 16 desr=orgr*(1-(perct#/100))+desr*(perct#/100) desg=orgg*(1-(perct#/100))+desg*(perct#/100) desb=orgb*(1-(perct#/100))+desb*(perct#/100) WritePixel PixOut:TPixmap,x,y,desb+(desg Shl 8)+(desr Shl 16) Next Next ' UnlockBuffer End Function Function VerticalBlur(PixIn:TPixmap, PixOut:TPixmap,perct#) desr=0 desg=0 desb=0 If perct#<50 Then perct#=50 If perct#>99 Then perct#=99 For x=0 To pixin.width-1 For y=0 To pixin.height-1 temp1=ReadPixel(PixIn:TPixmap,x,y) orgb=(temp1 & $FF) orgg=(temp1 & $FF00) Shr 8 orgr=(temp1 & $FF0000) Shr 16 desr=orgr*(1-(perct#/100))+desr*(perct#/100) desg=orgg*(1-(perct#/100))+desg*(perct#/100) desb=orgb*(1-(perct#/100))+desb*(perct#/100) WritePixel PixOut:TPixmap,x,y,desb+(desg Shl 8)+(desr Shl 16) Next Next End Function |
Comments
None.
Code Archives Forum