Shaping an image to fit in a polygon

Richmond richmondmathewson at gmail.com
Sat Oct 16 16:17:46 EDT 2021


Sorry, I am carrying this over to the Forums as I have a pictorial mind.

https://forums.livecode.com/viewtopic.php?f=7&t=36367

Richmond.

On 16.10.21 23:04, Richmond wrote:
> 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