Code archives/Graphics/Pixmap Blur
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
| Blur a pixmap | |||||
SuperStrict
Graphics 800, 600
SetBlend SOLIDBLEND
Local pic:TPixmap = createTestPixmap()
'Local pic:TPixmap = LoadPixmap("your.png")
Local pm:TPixmap = ConvertPixmap(pic, PF_RGBA8888)
blurPixmap(pm, 0.5)
While Not KeyHit(KEY_ESCAPE)
Cls
DrawPixmap pic, 0, 0
DrawPixmap pm, pic.width + 10, 0
Flip
Delay 1
Wend
End
Function createTestPixmap:TPixmap()
SeedRnd MilliSecs()
Local testpm:TPixmap = CreatePixmap(256, 256, PF_RGB888)
For Local x:Int = 0 To testpm.width - 1
For Local z:Int = 0 To testpm.height - 1
WritePixel(testpm, x, z, (Rand(0, 255) Shl 16) | (Rand(0, 255) Shl 8) | Rand(0, 255))
Next
Next
Return testpm
EndFunction
'*************** BLURRING FUNCTIONS ****************************
Function blurPixmap(pm:TPixmap, k:Float = 0.5)
'pm - the pixmap to blur. Format must be PF_RGBA8888
'k - blurring amount. Value between 0.0 and 1.0
' 0.1 = Extreme, 0.9 = Minimal
For Local x:Int = 1 To (pm.Width - 1)
For Local z:Int = 0 To (pm.Height - 1)
WritePixel(pm, x, z, blurPixel(ReadPixel(pm, x, z), ReadPixel(pm, x - 1, z), k))
Next
Next
For Local x:Int = (pm.Width - 3) To 0 Step -1
For Local z:Int = 0 To (pm.Height - 1)
WritePixel(pm, x, z, blurPixel(ReadPixel(pm, x, z), ReadPixel(pm, x + 1, z), k))
Next
Next
For Local x:Int = 0 To (pm.Width - 1)
For Local z:Int = 1 To (pm.Height - 1)
WritePixel(pm, x, z, blurPixel(ReadPixel(pm, x, z), ReadPixel(pm, x, z - 1), k))
Next
Next
For Local x:Int = 0 To (pm.Width - 1)
For Local z:Int = (pm.Height - 3) To 0 Step -1
WritePixel(pm, x, z, blurPixel(ReadPixel(pm, x, z), ReadPixel(pm, x, z + 1), k))
Next
Next
End Function
Function blurPixel:Int(px:Int, px2:Int, k:Float)
'Utility function used by blurPixmap.
'Uncomment the commented lines to enable alpha component
'processing (usually not required).
Local pxa:Byte = px Shr 24
Local pxb:Byte = px Shr 16
Local pxg:Byte = px Shr 8
Local pxr:Byte = px
'Local px2a:Byte = px2 Shr 24
Local px2b:Byte = px2 Shr 16
Local px2g:Byte = px2 Shr 8
Local px2r:Byte = px2
'pxa = (px2a * (1 - k)) + (pxa * k)
pxb = (px2b * (1 - k)) + (pxb * k)
pxg = (px2g * (1 - k)) + (pxg * k)
pxr = (px2r * (1 - k)) + (pxr * k)
Return Int(pxa Shl 24 | pxb Shl 16 | pxg Shl 8 | pxr)
EndFunction
'************************************************************** |
Comments
| ||
| nice! |
| ||
| This extends it a bit by reducing the scale of the blur making it quicker and then drawing it with alpha and slightly bigger to produce a bloom effect. Bit clunky but OK: Try changing the alpha value |
| ||
| Pixmap Blur: Awesome! tough it runs at only 5FPS here (realtime). Gloom: Also cool, runs at 50FPS here (realtime). |
Code Archives Forum