Shaping an image to fit in a polygon
Richmond
richmondmathewson at gmail.com
Sat Oct 16 16:04:20 EDT 2021
Also, this presupposes that your 'arbitrary polygon' is exactly that,
while LiveCode starts a 'polygon graphic' as
a line, and it is quite possible to end up with something that does NOT
involve an enclosed territory.
On 16.10.21 23:00, Richmond wrote:
> I'm a lazy slob, and because of that I would just do this sort of
> thing outwith LiveCode,
> with, say, GIMP.
>
> If you could explain your rationale behind trying to go "the long way
> round" in LiveCode
> I might be both more sympathetic and more helpful.
>
> Best, Richmond.
>
> On 16.10.21 22:17, David Epstein via use-livecode wrote:
>> 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 at lists.runrev.com
>> Please visit this url to subscribe, unsubscribe and manage your
>> subscription preferences:
>> http://lists.runrev.com/mailman/listinfo/use-livecode
>
More information about the use-livecode
mailing list