Github link
Import mojo
Class theimage
Field image:Image
Field pixels:Int[]
Field width:Int
Field height:Int
Method New()
Self.width = DeviceWidth()
Self.height = DeviceHeight()
pixels = New Int[width*height]
image = CreateImage(width,height)
makeimage
image.WritePixels(pixels, 0, 0, width, height, 0)
End Method
Method makeimage()
' here we make the
' noisy rainbow
Local x:Int
Local ty:Int
Local cnt:Int
Local sc:Int 'dheight with num of cols
For Local i:Int = 0 Until width*height
Local col:Int=sc
If sc<15
If Rnd((16-ty)+4) < 2
col+=1
End If
End If
pixels[i] = argb( spread.r[col],
spread.g[col],
spread.b[col])
x+=1
If x>width
x=0
cnt+=1
ty+=1
If ty>height/16
ty=0
End If
If cnt>height/16
cnt=0
sc+=1
End If
End If
Next
For Local ii=0 Until 20
For Local i:Int = 0 Until width*(height-1)
Local r1:Int=getred(pixels[i])
Local g1:Int=getgreen(pixels[i])
Local b1:Int=getblue(pixels[i])
Local r2:Int=getred(pixels[i+1])
Local g2:Int=getgreen(pixels[i+1])
Local b2:Int=getblue(pixels[i+1])
Local r3:Int=getred(pixels[i+width])
Local g3:Int=getgreen(pixels[i+width])
Local b3:Int=getblue(pixels[i+width])
Local ra:Int=(r1+r2+r3)/3
Local ga:Int=(g1+g2+g3)/3
Local ba:Int=(b1+b2+b3)/3
pixels[i] = argb(ra,ga,ba)
Next
next
End Method
End Class
Class colorspread16
Field r:Float[16]
Field g:Float[16]
Field b:Float[16]
Method New( r1:Int,g1:Int,b1:Int,
r2:Int,g2:Int,b2:Int)
Local sr:Float
Local sg:Float
Local sb:Float
If r1>r2
sr = (r1-r2)/16
For Local i:Float=0 Until 16 Step 1
r[i] = r1-(i*sr)
Next
Else
sr = (r2-r1)/16
For Local i:Float=0 Until 16 Step 1
r[i] = r1+i*sr
Next
End If
If g1>g2
sg = (g1-g2)/16
For Local i:Float=0 Until 16 Step 1
g[i] = g1-(i*sg)
Next
Else
sg = (g2-g1)/16
For Local i:Float=0 Until 16 Step 1
g[i] = g1+i*sg
Next
End If
If b1>b2
sb = (b1-b2)/16
For Local i:Float=0 Until 16 Step 1
b[i] = b1-(i*sb)
Next
Else
sb = (b2-b1)/16
For Local i:Float=0 Until 16 Step 1
b[i] = b1+i*sb
Next
End If
End Method
End Class
Global spread:colorspread16
Global myimage:theimage
Class MyGame Extends App
Field cnt:Int
Field r:Int[2]
Field g:Int[2]
Field b:Int[2]
Method OnCreate()
SetUpdateRate(60)
Seed = GetDate[5]
For Local i=0 To 1
r[i] = Rnd(0,255)
g[i] = Rnd(0,255)
b[i] = Rnd(0,255)
Next
spread = New colorspread16( r[0],g[0],b[0],
r[1],g[1],b[1])
myimage = New theimage()
End Method
Method OnUpdate()
cnt+=1
If cnt>200
cnt=0
For Local i=0 To 1
r[i] = Rnd(0,255)
g[i] = Rnd(0,255)
b[i] = Rnd(0,255)
Next
spread = New colorspread16( r[0],g[0],b[0],
r[1],g[1],b[1])
myimage = New theimage()
End If
End Method
Method OnRender()
Cls 0,0,0
SetColor 255,255,255
DrawImage myimage.image,0,0
' Draw the text
SetColor 255,255,255
DrawText "Monkey-X - Making Noisy Smoothed "+
" Rainbows - Example",0,0
End Method
End Class
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
Function Main()
New MyGame()
End Function
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.