I am trying to create an image that will appear to have the shape of some 
arbitrary polygon.  The idea is to set the image's alphaData so that pixels 
within the polygon are opaque, and those outside the polygon are transparent.  
The scripts below create a rectangular image of whatever is under the polygon's 
enclosing rectangle, and then adjust the alphaData of that new image.  But 
while the new image gets trimmed a bit, the result does not match the shape of 
the designated polygon.  Any thoughts?

David Epstein

on action gID ## gID is the short id of the polygon
  import snapshot from rectangle globalRect(the rect of control id gID) 
  put the short id of image (the number of images) into imID
  set the width of image id imID to the width of grc id gID
  set the height of image id imID to the height of grc id gID
  set the loc of image id imID to the loc of grc id gID
  set the polyCrop of image id imID to gID
end action

function globalRect theRect
  return globalLoc(item 1 to 2 of theRect),globalLoc(item 3 to 4 of theRect)
end globalRect

setProp polyCrop polyID
  -- crop target image's alphadata to show only points within grc id polyID
  put the filled of grc id polyID into fillState
  set the filled of grc id polyID to true
  put the rect of the target into r
  put numToChar(255) into P ## opaque
  put numToChar(0) into T ## transparent
  repeat with y = 1+item 2 of r to item 4 of r ## SEE NOTE*
    repeat with x = 1+item 1 of r to item 3 of r
      put x,y into myPoint
      if within(grc id polyID,myPoint) then put P after hold else put T after 
hold
    end repeat
  end repeat
  set the filled of grc id polyID to fillState
  set the alphaData of the target to hold
end polyCrop

* NOTE:  the "1+" is these statements is my effort to step through the exact 
number of pixels in the width and height of the image.  The number of values in 
the series (item 1 of the rect of the image) to (item 3 of the rect of the 
image), inclusive, is 1+ the width of the image.  (But I am not really sure 
whether to add 1 to the first value or subtract 1 from the last value).
_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to