Michael von Aichberger <[EMAIL PROTECTED]> wrote:
> I want to create a radial gradient with Lingo...
> Calculating the color change is not the problem, but how do I calculate the
> pixels for the concentric circles?
Hi Michael,
Why not let Director do this for you by using the image of a Vector Shape
member?
Here's a handler that allows you to create a radial gradient with a given
center point, center color, outer color and radius.
You can test it by copying the handler into a Movie Script and typing the
following lines of code in the Message window:
tImage = image(128, 128, 8, #Web216)
-- Remove hard returns from the following line:
mRadialGradient([#radius: 128, #image: tImage, #centerColor: rgb(255, 255,
0), #outerColor: rgb(255, 0, 0), #centerLoc: point(64, 0)])
new(#bitmap).image = tImage
You can get a much smoother gradient if you use this for the first line:
tImage = image(128, 128, 32)
Cheers,
James
----------------------------------------------------------------------------
on mRadialGradient(aDataList) ----------------------------------------
-- INPUT: <aDataList> should be a property list with the format:
-- [#image: <image object>,
-- #centerLoc: <point>,
-- #centerColor: <color object>,
-- #outerColor: <color object>,
-- #diameter: <positive integer or float>,
-- #options: <copyPixels-style property list>]
-- ACTION: Copies a circular image with a radial gradient to the
-- image object defined by aDataList.image
--------------------------------------------------------------------
-- Unpack the data in the property list (no error checking)
tImage = aDataList.image
tRadius = aDataList.radius
tCenter = aDataList.centerLoc - tRadius
tFillColor = aDataList.centerColor
tEndColor = aDataList.outerColor
tOptions = aDataList[#options]
if ilk(tOptions) <> #propList then
tOptions = [:]
end if
tSourceRect = rect(0, 0, tRadius * 2, tRadius * 2)
-- Create a temporary circular vector shape
tVectorShape = new(#vectorShape)
tVectorShape.vertexList = [ \
[#vertex: point(-50, -50), \
#handle1: point(28, -28), #handle2: point(-28, 28)], \
[#vertex: point(50, -50), \
#handle1: point(28, 28), #handle2: point(-28, -28)], \
[#vertex: point(50, 50), \
#handle1: point(-28, 28), #handle2: point(28, -28)], \
[#vertex: point(-50, 50), \
#handle1: point(-28, -28), #handle2: point(28, 28)]]
-- Set the properties to give a smooth gradient from center to edge
tVectorShape.closed = TRUE
tVectorShape.strokeWidth = 0
tVectorShape.fillMode = #gradient
tVectorShape.gradientType = #radial
tVectorShape.fillCycles = 2
tVectorShape.fillColor = tFillColor
tVectorShape.endColor = tEndColor
tVectorShape.defaultRect = tSourceRect
-- Copy the image of the vectorShape to aDataList.image
tVectorImage = tVectorShape.image
tDestRect = tSourceRect.offset(tCenter.locH, tCenter.locV)
tImage.copyPixels(tVectorImage, tDestRect, tSourceRect, tOptions)
tVectorShape.erase()
end mRadialGradient
[To remove yourself from this list, or to change to digest mode, go to
http://www.penworks.com/lingo-l.cgi To post messages to the list, email
[EMAIL PROTECTED] (Problems, email [EMAIL PROTECTED]). Lingo-L is for
learning and helping with programming Lingo. Thanks!]