Link to original Hugi article
Import mojo
Class theimage
Field x:Int
Field y:Int
Field image:Image
Field pixels:Int[]
Field width:Int
Field height:Int
Method New( x:Int,y:Int,
width:Int,
height:Int)
pixels = New Int[width*height]
image = CreateImage(width,height)
Self.x = x
Self.y = y
Self.width = width
Self.height = height
makeimage
image.WritePixels(pixels, 0, 0, width, height, 0)
End Method
Method makeimage()
Seed = 10
For Local i:Int = 0 Until width*height
Local col:Int=Rnd(255)
pixels[i] = argb(col,col,col)
Next
End Method
Method smoothimage()
For Local i:Int = 0 Until width*height
Local rpix:Int=i+1
Local bpix:Int=i+width
Local cpix:Int=i
' read right, bottom and current
If bpix<width*height And rpix<width*height
Local r1:Int = getred(pixels[cpix])
Local g1:Int = getgreen(pixels[cpix])
Local b1:Int = getblue(pixels[cpix])
Local r2:Int = getred(pixels[rpix])
Local g2:Int = getgreen(pixels[rpix])
Local b2:Int = getblue(pixels[rpix])
Local r3:Int = getred(pixels[bpix])
Local g3:Int = getgreen(pixels[bpix])
Local b3:Int = getblue(pixels[bpix])
Local nr:Int,ng:Int,nb:Int
'avarage
nr = (r1+r2+r3)/3
ng = (g1+g2+g3)/3
nb = (b1+b2+b3)/3
pixels[i] = argb(nr,ng,nb)
End If
Next
image.WritePixels(pixels, 0, 0, width, height, 0)
End Method
Method draw()
DrawImage image,x,y
End Method
End Class
Global im1:theimage
Global im2:theimage
Class MyGame Extends App
Field cnt:Int
Field passim:Int
Method OnCreate:Int()
SetUpdateRate(60)
Seed = GetDate[5]
im1 = New theimage(10,20,200,200)
im2 = New theimage(330,20,200,200)
End Method
Method OnUpdate()
cnt+=1
If cnt>10
im2.smoothimage
cnt=0
passim+=1
End If
If passim > 80
im2 = New theimage(330,20,200,200)
passim = 0
End If
End Method
Method OnRender:Int()
Cls
im1.draw
im2.draw
SetColor 255,255,255
DrawText "Monkey-X - Smooth(Hugi) on"+
" Random Greyscale Image (pixels).",0,0
DrawText "Pass : "+
passim+
" of 80",10,400
End Method
End Class
Function Main:Int()
New MyGame()
End Function
Function argb:Int(r:Int, g:Int, b:Int ,alpha:Int=255)
Return (alpha Shl 24) | (r Shl 16) | (g Shl 8) | b
End Function
Function getred:Int(rgba:Int)
Return((rgba Shr 16) & $FF)
End Function
Function getgreen:Int(rgba:Int)
Return((rgba Shr 8) & $FF)
End Function
Function getblue:Int(rgba:Int)
Return(rgba & $FF)
End Function
Function getalpha:Int(rgba:Int)
Return ((rgba Shr 24) & $FF)
End Function
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.