[EMAIL PROTECTED] wrote:
Thanks for enlightening me, Valentin :)

There's still something fishy about it, it's not really doing what it
should... here's the code (and I'm having a float attack :) )
Maybe you can spot where it goes wrong...

Chris.

I don't really understand this spherize function.
but check out this one I just wrote, maybe it does what you need. I think it does pretty much the same as the corresponding photoshop filter.
notice: code not optimized for speed yet

-- optional parameters tPercent, tCenter, tRadius
-- defaults: tPercent=100%, tCenter=center of image
on spherize (tImage, tPercent, tCenter, tRadius)
 w = tImage.width
 h = tImage.height

 if voidP(tPercent) then tPercent=100.0
 if voidP(tCenter) then tCenter = point(w/2, h/2)
 if voidP(tRadius) then tRadius = min(w/2, h/2)

 Math = newObject("Math")

 newImage = tImage.duplicate()
 centerX = tCenter[1]
 centerY = tCenter[2]
 rr = tRadius / sqrt(1- power(1-tPercent/100.0, 2) )
 f = Math.asin(tRadius/rr) -- 100%: pi/2

 repeat with y = 0 to h-1
   repeat with x = 0 to w-1
     d0 = sqrt(power(x-centerX,2)+power(y-centerY,2))
     if d0>0 and d0<tRadius then
       d1 = tRadius * Math.asin(d0/rr)
       k = d1/d0/f
       xNew = centerX + (x-centerX)* k
       yNew = centerY + (y-centerY)* k
       newImage.setPixel(x, y, tImage.getPixel(xNew, yNew))
     end if
   end repeat
 end repeat

 tImage.copyPixels(newImage, newImage.rect, newImage.rect)
 put "done"
end
[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!]

Reply via email to