Opps there are typos in that code, use this instead.
load image "test.jpg",1,1
greyscale(1,2)
paste image 2,0,0
wait key
function greyscale(in as integer,out as integer)
`converts an image to greyscale 32bit only
`in = input image #, out=output image #
local mem_i as integer : local mem_o as integer
local i as integer : local grey as integer
local r as integer : local g as integer : local b as integer : local a as integer
`input memblock
mem_i = free_memblock()
make memblock from image mem_i,in
`output memblock
mem_o = free_memblock()
make memblock mem_o,get memblock size(mem_i)
write memblock dword mem_o,0,memblock dword(mem_i,0) : `width
write memblock dword mem_o,4,memblock dword(mem_i,4) : `height
write memblock dword mem_o,8,32 : `depth
`go through each pixel and covert to greyscale
for i = 12 to get memblock size(mem_i)-1 step 4
`read
b = memblock byte(mem_i,i)
g = memblock byte(mem_i,i+1)
r = memblock byte(mem_i,i+2)
a = memblock byte(mem_i,i+3)
`work out grey value
grey = (0.3*R) + (0.59*G) + (0.11*B)
`write
write memblock byte mem_o,i,grey
write memblock byte mem_o,i+1,grey
write memblock byte mem_o,i+2,grey
write memblock byte mem_o,i+3,a
next i
`create out image
make image from memblock out,mem_o
delete memblock mem_i
delete memblock mem_o
endfunction
function free_memblock()
`finds a free memblock
local i as integer : local stop as integer
repeat
inc i
if memblock exist(i) = 0 then stop = 1
until stop = 1
endfunction i
you ain't the cops