this works pretty well.
sync on : sync rate 60
load bitmap "c:\dark basic\orangepa.bmp",1
AntiAlias(1,3)
Copy Bitmap 1,0
Sync
Sync
Wait Key
Delete Bitmap 1
End
`takes a bitmap number and clearness
`the higher the clearness, the clearer the output is.
`it's how many times the base pixel color is added into the mix, really.
function AntiAlias(bitmap,clearness)
`1 is editing MB, 2 is ref MB
make memblock from bitmap 1,1
make memblock from bitmap 2,1
delete bitmap 1
width=memblock dword(1,0)
for x=0 to memblock dword(1,0)-1
for y=0 to memblock dword(1,4)-1
color=memblock_point32(2,x,y)
colorabove=memblock_point32(2,x,y-1)
colorbelow=memblock_point32(2,x,y+1)
colorleft =memblock_point32(2,x-1,y)
colorright=memblock_point32(2,x+1,y)
if not (color=colorleft and color=colorright and color=colorabove and color=colorbelow)
if colorabove=-1
`topleft corner -- use right and below
if colorleft=-1
averager=((rgbr(color)*clearness)+rgbr(colorright)+rgbr(colorbelow))/(2+clearness)
averageg=((rgbg(color)*clearness)+rgbg(colorright)+rgbg(colorbelow))/(2+clearness)
averageb=((rgbb(color)*clearness)+rgbb(colorright)+rgbb(colorbelow))/(2+clearness)
color=(averager<<16)+(averageg<<8)+averageb
endif
`topright corner -- use left and below
if colorright=-1
averager=((rgbr(color)*clearness)+rgbr(colorleft)+rgbr(colorbelow))/(2+clearness)
averageg=((rgbg(color)*clearness)+rgbg(colorleft)+rgbg(colorbelow))/(2+clearness)
averageb=((rgbb(color)*clearness)+rgbb(colorleft)+rgbb(colorbelow))/(2+clearness)
color=(averager<<16)+(averageg<<8)+averageb
else
`top row but not in corners -- use left, right, and below
averager=((rgbr(color)*clearness)+rgbr(colorright)+rgbr(colorleft)+rgbr(colorbelow))/(3+clearness)
averageg=((rgbg(color)*clearness)+rgbg(colorright)+rgbg(colorleft)+rgbg(colorbelow))/(3+clearness)
averageb=((rgbb(color)*clearness)+rgbb(colorright)+rgbb(colorleft)+rgbb(colorbelow))/(3+clearness)
color=(averager<<16)+(averageg<<8)+averageb
endif
endif
if colorbelow=-1
`bottomleft corner -- use right and above
if colorleft=-1
averager=((rgbr(color)*clearness)+rgbr(colorright)+rgbr(colorabove))/(2+clearness)
averageg=((rgbg(color)*clearness)+rgbg(colorright)+rgbg(colorabove))/(2+clearness)
averageb=((rgbb(color)*clearness)+rgbb(colorright)+rgbb(colorabove))/(2+clearness)
color=(averager<<16)+(averageg<<8)+averageb
endif
`bottomright corner -- left and above
if colorright=-1
averager=((rgbr(color)*clearness)+rgbr(colorleft)+rgbr(colorabove))/(2+clearness)
averageg=((rgbg(color)*clearness)+rgbg(colorleft)+rgbg(colorabove))/(2+clearness)
averageb=((rgbb(color)*clearness)+rgbb(colorleft)+rgbb(colorabove))/(2+clearness)
color=(averager<<16)+(averageg<<8)+averageb
else
`bottom row but not in corners -- left, right, and above
averager=((rgbr(color)*clearness)+rgbr(colorright)+rgbr(colorleft)+rgbr(colorabove))/(3+clearness)
averageg=((rgbg(color)*clearness)+rgbg(colorright)+rgbg(colorleft)+rgbg(colorabove))/(3+clearness)
averageb=((rgbb(color)*clearness)+rgbb(colorright)+rgbb(colorleft)+rgbb(colorabove))/(3+clearness)
color=(averager<<16)+(averageg<<8)+averageb
endif
else
`left column, not in corners -- above, below, and right
if colorleft=-1
averager=((rgbr(color)*clearness)+rgbr(colorright)+rgbr(colorabove)+rgbr(colorbelow))/(3+clearness)
averageg=((rgbg(color)*clearness)+rgbg(colorright)+rgbg(colorabove)+rgbg(colorbelow))/(3+clearness)
averageb=((rgbb(color)*clearness)+rgbb(colorright)+rgbb(colorabove)+rgbb(colorbelow))/(3+clearness)
color=(averager<<16)+(averageg<<8)+averageb
endif
`right column, not in corners -- above, below, and left
if colorright=-1
averager=((rgbr(color)*clearness)+rgbr(colorabove)+rgbr(colorleft)+rgbr(colorbelow))/(3+clearness)
averageg=((rgbg(color)*clearness)+rgbg(colorabove)+rgbg(colorleft)+rgbg(colorbelow))/(3+clearness)
averageb=((rgbb(color)*clearness)+rgbb(colorabove)+rgbb(colorleft)+rgbb(colorbelow))/(3+clearness)
color=(averager<<16)+(averageg<<8)+averageb
else
`in the middle -- all sides
averager=((rgbr(color)*clearness)+rgbr(colorabove)+rgbr(colorleft)+rgbr(colorbelow)+rgbr(colorright))/(4+clearness)
averageg=((rgbg(color)*clearness)+rgbg(colorabove)+rgbg(colorleft)+rgbg(colorbelow)+rgbg(colorright))/(4+clearness)
averageb=((rgbb(color)*clearness)+rgbb(colorabove)+rgbb(colorleft)+rgbb(colorbelow)+rgbb(colorright))/(4+clearness)
color=(averager<<16)+(averageg<<8)+averageb
endif
endif
pos=((width*4)*y)+(x*4)+12
write memblock dword 1,pos,color
endif
next y
next x
make bitmap from memblock 1,1
delete memblock 1
delete memblock 2
endfunction
function memblock_point32(mb,x,y)
if x<0 then exitfunction -1
if y<0 then exitfunction -1
if x>memblock word(mb,0)-1 then exitfunction -1
if y>memblock word(mb,4)-1 then exitfunction -1
width=memblock dword(mb,0)
x=((width*4)*y)+(x*4)
color=memblock dword(mb,x+12)
color=color && 0x00FFFFFF
endfunction color
stop looking at me!