Mutltiple Masking

Blitz3D Forums/Blitz3D Programming/Mutltiple Masking

amitjf(Posted 2006) [#1]
is it possible to mask image more than one color? because I've tried to do maskimage than another maskimage but only the second maskimage worked.
thanks in advance


jfk EO-11110(Posted 2006) [#2]
That's not possibe as far as I know, but you could use a little trick to achieve the same:

use Setbuffer, Lockbuffer and ReadPixelFast and WritePixelFast to paint all to-be-masked pixels with one definite maskcolor that will be used with MaskImage later. EG:

setbuffer imagebuffer (img)
lockbuffer()
w=imagewidth(img)
h=imageheight(img)
for j=0 to h-1
 for i=0 to w-1
  rgb=readpixelfast(i,j) and $FFFFFF
  if (rgb=mask1) or (rgb=mask2) or (rgb=mask3)
   writepixelfast i,j,mask1
  endif
 next
next
unlockbuffer()
setbuffer backbuffer()
maskimage img,mask1


Or you may store this inside a function, so it becomes more useful:


my_maskimage(img,$000000,$FF00FF,$00FF00)
...

function my_maskimage(img,col1=0,col2=0,col3=0,col4=0,col5=0)
 setbuffer imagebuffer (img)
 lockbuffer()
 w=imagewidth(img)
 h=imageheight(img)
 for j=0 to h-1
  for i=0 to w-1
   rgb=readpixelfast(i,j) and $FFFFFF
   if (rgb=col1) or (rgb=col2) or (rgb=col3) or (rgb=col4) or (rgb=col5)
    writepixelfast i,j,col1
   endif
  next
 next
 unlockbuffer()
 setbuffer backbuffer()
 maskimage img,mask1
 return img
end function


So this allows to use a max of 5 maskcolors. You may of course increase the number of optional colors. Tho, if you omit any maskcolor parameter in the function call, then black ($000000) is taken as default, so maybe you need to alter this.