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