converts an image to grayscale by the_winch22nd Apr 2004 15:56
|
---|
Summary Converts and image to grayscale using memblocks. Use in 32bit depth only. Description Code ` This code was downloaded from The Game Creators ` It is reproduced here with full permission ` http://www.thegamecreators.com function grayscale(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 gray 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 gray = (0.3*r)+(0.59*g)+(0.11*b) gray = rgba(gray,gray,gray,a) `write write memblock dword mem_o,i,gray next i `create out image make image from memblock out,mem_o delete memblock mem_i delete memblock mem_o endfunction function rgba(r as integer,g as integer,b as integer,a as integer) colour as dword colour = (b)+(g*256)+(r*65536)+(a*16777216) endfunction colour 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 |