ok..maybe you gents can help me on a problem I've had off and on..
project summary:
* load in a dynamic image
* trace/create a lineTo object/fill on a layer above this loaded image
* click a button to create an inversed mask of this above created
lineTo object
* effect is the part you drew/colored is not 'cropped' out of the
loaded image (revealing whatever content below)
laymen's terms:
load in a image, using the mouse you draw an shape/object 'on' the loaded
image clip, click a button.. it crops it out (thats the effect).. so if you
load an image of a face..you draw a shape/object around the teeth/eye
(whatever) it will 'knock it out'..revealing whatever objects/clips are
underneath the loaded image clip..
project layout:
contentConainer:
a clips called faceContainer.. inside faceContainer is a clip called
centeredContainer
I load the image into faceContainer.centeredContainer (an offset/center the
centeredContainer inside faceContainer) so that if/when I scale/rotate
faceContainer clip..is scales/rotates form the center point.. (make sense?)
so:
parent.parent clip (contentContainer)
---parent clip (faceContainer)--
------lineContainer (holds the shape/object I'm using for my source of the
inverse mask
------maskContainer (empty clip to hold the dynamically created clip from
the inverse mask method above)
------centeredContainer (the place where the dynamically loaded image gets
loaded into, and is 'masked' by the inversedMask method)
everything actually works FINE.... until I load in a BIG image.. if I load
an image that DOES not (originally) go -0 (before resize) or is smaller that
the display area..it works fine.. if I load in a HUGE image, something has
an _x value of less than 0 (zero).. it doesnt work.. (FYI: on the
movieClipLoader.onLoadInit() I do resize/scale the movieClip...but
again..for images that are originally very BIG before re-size..the
inversedmask effect does NOT work)
I'm fairly certain it has to do with the matrix.translate or maybe I need to
add to it? but no matter what I've tried.. I cant seem to get it to
work..or possible the threshold portion??
ok..onto the problem/question...
code snippets..
here is the resize code/check I do once the movieClip initializes
RE-SIZE:
// if height is too big then resize to fit height
if (target_mc._parent._height > max_height) {
target_mc._parent._height = max_height;
target_mc._parent._xscale = target_mc._parent._yscale;
// if height is too small then resize to fit height
}else if(target_mc._parent._height < max_height) {
target_mc._parent._height = max_height;
target_mc._parent._xscale = target_mc._parent._yscale;
}
INVERSED MASK: ( mc = contentContainer.faceContainer.lineContainer)
//--------------------- [reverse mask code] --------------------- //
function inverseMask(mc:MovieClip) {
contentContainer.faceContainer.centeredContainer.cacheAsBitmap = true;
var _BMP:BitmapData = new
BitmapData(contentContainer.faceContainer.centeredContainer._width,
contentContainer.faceContainer.centeredContainer._height, true, 0xFFFFFFFF);
var invert:ColorTransform = new ColorTransform(0, 0, 0, 1);
var matrix:Matrix = new Matrix();
matrix.translate(0, 0);
//matrix.translate(mc._x, mc._y); //doesnt work
//matrix.translate(contentContainer.faceContainer.centeredContainer._x,
contentContainer.faceContainer.centeredContainer._y); //doesnt work
//matrix.identity();
//matrix.scale(contentContainer.faceContainer.centeredContainer._xscale,
contentContainer.faceContainer.centeredContainer._yscale);
_BMP.draw(mc, matrix, invert);
_BMP.threshold(_BMP, new Rectangle(0, 0, Stage.width, Stage.height),
new Point(0, 0), "<", 0xFFFFFFFF, 0x00FF0000);
var BMP:BitmapData = _BMP.clone();
var maskMC:MovieClip =
contentContainer.faceContainer.maskContainer.createEmptyMovieClip("invertedM
ask", contentContainer.faceContainer.maskContainer.getNextHighestDepth());
maskMC.attachBitmap(BMP,
contentContainer.faceContainer.maskContainer.getNextHighestDepth());
maskMC.cacheAsBitmap = true;
mc._visible = false;
return maskMC;
}
anybody good with matrix stiff and bitmap class??
I've tried doing/changing everything I can.... but it hasn't seemed to
work..
again to re-cap.. everything works.. if the image I load is 'around' the
470x410 dimension..(or smaller) it works fine..
I've tested it on a 550c462 image..and it works..however.... when I load in
an image 1500x1500 for example.. the inversed mask DOES NOT work..
it ONLY seems to work in the upper, left hand most corner....
I guess my 'thoughts' on this are:
since the image is centered, and being that it is 1500x1500.. the _x of the
'faceContainer' is less than zero (0)...and somehow this is affecting where
inversedMask function is applied?.. which is why I think it could be the
Matrix...OR, possible even the threshold portion of the code?
Thanks
_______________________________________________
Flashcoders mailing list
[email protected]
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders