Mutltiple Masking

Blitz3D Forums/Blitz3D Programming/Mutltiple Masking

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

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.