test

On 17 Mar 2005, at 18:38, Mendelsohn, Michael wrote:

Hi Arthur...


I have tried and tried to make this work and I cannot. Do you have a
small director file that does this that you can send me so that I can
study it.



Luckily, I caught your email to me, as it got filtered into Lingo-L!
The entire behavior is below, and it gets attached to a 1-bit 1x1 pixel
image on the stage, so there really isn't a file I can send you per se,
but I'm posting all my code, for the benefit of others as well. I'll
try to explain, line by line, what I'm doing, with lots of comments. If
you have any questions, let me know.


First, make a movie with two images in it, one a 1x1 pixel black image,
and put it on the stage.  Next, have some photo in your cast that you
want to extract the luminosity out of, but don't put it on the stage.
The following lingo is taken out of the whole behavior.  Alternately,
you could make a behavior and use a getPropertyDescritpionList dropdown
menu to choose the image you want as the source photo.

-- create a black and white buffer image with same dimensions as the
photo, not the 1x1 pixel on the stage.
theBW = image(120, 180, 8)
theBW.paletteRef = #grayscale -- make sure it's grayscale (because 8-bit
could still be 256 *color*)
-- the buffer image is grayscale so that you don't have to desaturate
any colors: you're just dealing with brightness. In effect, when you
copy the color photo into the #grayscale image, you're converting it to
black and white.
-- SIDE NOTE --> This is NOT the best way to convert a color photo to
grayscale, but it's my Lingo way.
-- The REAL way to do it is with HSL in Photoshop, going through each of
the channels!
-- copy a color image into the 8-bit #grayscale image forces it to
convert it to BW on the following line...
theBW.copypixels(member("photo").image,
member("photo").image.rect,member("photo").image.rect)
-- next, I colorize a "background" buffer image for the newly b&w photo
(like taking a red piece of construction paper, and running it through a
laser printer to print a photo).
-- create the color buffer image, same dimensions as BW buffer image
theColorized = image(120, 180, 32)
-- here, I chose green as the "color of the construction paper," so to
speak.
theColorized.fill(theColorized.rect, rgb(0,0,255))
-- then apply the BW photo into the color photo
theColorized.copyPixels(theBW, theColorized.rect,
theColorized.rect,[#ink:39])
-- by adding [#ink:39], what I did was transfer the "darkness" info out
of the photo and onto the solid field of color. If you think about it,
if the grayscale photo has values that go from black to white, only the
values darker than the substrate get copied over to the green. And, any
white in the grayscale image will not overwrite the green pixels.


Hope this is clearer for you.
- Michael M.



-- the whole behavior, timeouts and all
==================================================================
-- This behavior creates an image on the stage that is a collage of two
rows of four colorized,smaller b&w images, picked randomly out of an
external cast, and fades them in, quite nicely, I might add.  :-)

property pSp
property pBackupImage
property pRecentPhotosPicked
property pColors
property pData
property pRectList -- list (master), and duplicate list (to pull from)
used to position copyPixel calls

on beginSprite(me) -- initialize image
pSp = sprite(me.spriteNum)
pColors = [rgb(114,39,80), rgb(101,87,135), rgb(159,27,41),
rgb(43,109,115), rgb(0,69,132),
rgb(211,88,0),rgb(151,148,44),rgb(110,99,88)] -- our corporate colors
theRectSet = [[rect(0,0,120,180), VOID], [rect(120,0,240,180), VOID],
[rect(240,0,360,180), VOID], [rect(360,0,480,180), VOID],
[rect(0,180,120,360), VOID], [rect(120,180,240,360), VOID],
[rect(240,180,360,360), VOID], [rect(360,180,480,360), VOID]]
pRectList = [theRectSet, duplicate(theRectSet), duplicate(theRectSet)]
-- [the rect, the associated image, the second backup used to go to the
next round]
pData = [#pIncrement:0, #pCastNum:VOID, #pRect:VOID] -- shared data
between timeouts
pBackupImage = pSp.member.image.duplicate()
-- pick 8 initial "previously used" images to ensure no doubling from
the outset
pRecentPhotosPicked = [] -- [castnumber, 8 positions] no double images
should show up
repeat while (TRUE)
w = random(castLib("thumbs").member.count) -- I have a separate cast
filled just with my thumbnail images
if (pRecentPhotosPicked.getOne(w) = 0) then -- ensures no double
occurances within this list
pRecentPhotosPicked.add(w)
pRectList[2][pRecentPhotosPicked.count][2] = w
end if
if pRecentPhotosPicked.count = 8 then
exit repeat
end if
end repeat
-- create initial image of the thumbs cast, 4 columns, 2 rows, all are
120 x 180
initImg = image(480, 360, 32)
imageIndex = 1
theT = 0
theB = 180
repeat with r = 1 to 2
theL = 0
theR = 120
repeat with c = 1 to 4
-- colorized photo
theThumbImage = pRectList[2][imageIndex][2]
imageIndex = imageIndex + 1
theBW = image(120, 180, 8)
theBW.paletteRef = #grayscale
theBW.copypixels(member(theThumbImage, "thumbs").image,
member(theThumbImage, "thumbs").image.rect, member(theThumbImage,
"thumbs").image.rect)
theColorized = image(120, 180, 32)
theColorized.fill(theColorized.rect,
pColors[random(pColors.count)]) -- fill with random FM Global color
theColorized.copyPixels(theBW, theColorized.rect,
theColorized.rect, [#ink:39])
initImg.copyPixels(theColorized, rect(theL, theT, theR, theB),
theColorized.rect)
theL = theL + 120
theR = theR + 120
end repeat
theT = theT + 180
theB = theB + 180
end repeat
pSp.member.image = initImg
pSp.member.regPoint = point(0,0)
chooseSaturationPosition =
timeout("chooseSaturationPosition").new(500, #chooseSaturationPosition,
me) -- start animation
end


on chooseSaturationPosition(me)
  timeout("chooseSaturationPosition").forget() -- end this part of the
animation (picking postion and colorizing image)
  -- pick position to copy to, create colorized initial image
  if (pRectList[2].count = 0) then
    -- init again!  8 colorized, then 8 colored!
    pRectList[2] = duplicate(pRectList[1]) -- then change all image
representatives from void to a member number!!!!
    -- make sure not to pick any of the images from the previous 8!
    theNewSet = []
    repeat while (TRUE)
      w = random(castLib("thumbs").member.count)
      if (pRecentPhotosPicked.getOne(w) = 0) and (theNewSet.getOne(w) =
0) then -- shouldn't be double from previous set, or already in new set
being built
        theNewSet.add(w)
        pRectList[2][theNewSet.count][2] = w -- was pRecentPhotosPicked
      end if
      if (theNewSet.count = 8) then
        pRecentPhotosPicked = theNewSet
        exit repeat
      end if
    end repeat
    pRectList[3] = duplicate(pRectList[2])
    recolorize = timeout("recolorize").new(100, #recolorize, me) --
phase 4 of the animation, build a new set of colorized thumbs
  else
    theItem = random(pRectList[2].count) -- the list to pick and delete
from
    pData.pRect = pRectList[2][theItem][1]
    pData.pCastNum = pRectList[2][theItem][2]
    pRectList[2].deleteAt(theItem)
    delaySaturate = timeout("delaySaturate").new(250, #delaySaturate,
me)-- begin phase 2 of animation: delay to launch colorized image
saturatation
  end if
end

on delaySaturate(me) -- just a small delay!
  timeout("delaySaturate").forget() -- end phase 2 of animation
  saturate = timeout("saturate").new(25,#saturate, me) -- begin phase 3
of animation: saturation process
end

on saturate(me)
  if pData.pIncrement < 72 then
    pSp.member.image.copyPixels(member(pData.pCastNum, "thumbs").image,
pData.pRect, member(pData.pCastNum, "thumbs").image.rect, [#blend:2])
    pData.pIncrement = pData.pIncrement + 1
  else
    timeout("saturate").forget() -- end phase 3
    pData.pIncrement = 0
    chooseSaturationPosition =
timeout("chooseSaturationPosition").new(250, #chooseSaturationPosition,
me) -- restart phase 1 of animation
  end if
end

on recolorize(me)
if (pRectList[2].count > 0) then
theTarget = random(pRectList[2].count)
-- build the COLORIZED image, randomly place it
theBW = image(120, 180, 8)
theBW.paletteRef = #grayscale
theBW.copypixels(member(pRectList[2][theTarget][2], "thumbs").image,
member(pRectList[2][theTarget][2], "thumbs").image.rect,
member(pRectList[2][theTarget][2], "thumbs").image.rect)
theColorized = image(120, 180, 32)
theColorized.fill(theColorized.rect, pColors[random(pColors.count)])
-- fill rectangle with random FM Global color
theColorized.copyPixels(theBW, theColorized.rect, theColorized.rect,
[#ink:39]) -- apply B&W version of thumbnail to solid color #39=darkest
pSp.member.image.copyPixels(theColorized,
pRectList[2][theTarget][1], theColorized.rect)
pRectList[2].deleteAt(theTarget)
else
timeout("recolorize").forget()
pRectList[2] = duplicate(pRectList[3])
chooseSaturationPosition =
timeout("chooseSaturationPosition").new(500, #chooseSaturationPosition,
me) -- start animation
end if
end


on endSprite(me)
  _movie.timeOutList = []
  pSp.member.image = pBackupImage
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!]



[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