Problem with mask

Wilhelm Sanke sanke at hrz.uni-kassel.de
Tue Oct 21 16:38:57 CDT 2008


In the meantime Jim has sent me the essential script offlist from which 
I recreated a test stack.

He wrote (to this list):

> Well, my problem with mask is no more.
>
> Turns out the Run Rev within() function is a bit strange.
>
> The masked ellipse is flat on the right side and the bottom because 
> within() counts the left and top  of a graphic to within the graphic, 
> but not the right and bottom.


Well, among the variations I tried with your script there is one where I 
reversed the direction of "scanning" the graphic.

"put the topLeft of img 1 into tTopLeft
  put item 1 of tTopLeft into x0
  put item 2 of tTopLeft into y0
# repeat with j = 1 to tHeight
  # repeat with i = 1 to tWidth
#now. reversed direction
  repeat with j =  tHeight down to 1
    repeat with i =  tWidth down to 1
      put x0+i,y0+j into tPt
      if within(grc 1, tPt) then
        put tClear after tData
      else
        put tBlock after tData
      end if
    end repeat
  end repeat"

The result of this change of direction is that now the flat edges appear 
on the left and on top, meaning we still need to define a "within" bug 
more accurately, but I don't know how.

 Increasing the rect of the image so that it extends to outside the rect 
of the graphic does not make any difference.

In the case of Photo Patchworks such a strategy worked with a "padded" 
corresponding template image whose transparency mask was then used for 
the cropped image of the same size.
Only the "edges" I got from a non-padded mask image are different from 
Jim's: I get black lines by the side and not flattened edges.



Joe Lewis Wilkins pepetoo at cox.net wrote:

> Hi James,
>
> In one of this threads first responses, I implied as much when I said 
> that you probably needed to subtract one from all right and bottom 
> coordinates, since this has been a problem for a very long time. Of 
> course, I don't know if just a minus one would have cured everything, 
> but it may have helped.



Joe,

if what you mean is a change in the script  like here

repeat with j = 1 to tHeight -1
   repeat with i = 1 to tWidth -1

then you get a distorted mask because the mask data  to not fit exactly 
into the rect of the image.

I am still puzzled by this bug.

Best regards,

Wilhelm Sanke




More information about the use-livecode mailing list