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. |