Greetings,
I have a 50x50 fixed rectangle in the center of the stage. I am using this rectangle as a “hit area” to copy pixels of a bitmap that is draged by the user to line up an area of the image he/she would like to crop. I have preview of the hit area displayed while the bm is being dragged which works well. However, once the bitmap is scaled using the slider component the preview area no longer reflects what is in the hit area. I am really struggling here. Any help is greatly appreciated.
Code below:
function mouseDownHandler(e:MouseEvent):void
{
// Contraint #8 - Define drag bounds
var cropAreaX:Number = cropArea_mc.x + (cropAreaW / 2);
holderW = e.currentTarget.width;
var boundsX:Number = cropAreaX - holderW;
var cropAreaY:Number = cropArea_mc.y + (cropAreaW / 2);
holderH = e.currentTarget.height;
var boundsY:Number = cropAreaY - holderH;
var bounds:Rectangle = new Rectangle(cropAreaX - holderW,cropAreaY - holderH, holderW - cropAreaW, holderH - cropAreaH);
e.currentTarget.startDrag(false,bounds);
// need a mouse move handler
//defineCrop(holderW, holderH, dynamicX, dynamicY);
trace ("cropAreaX " + cropArea_mc.x);
trace ("cropAreaY " + cropArea_mc.y);
setHelpString(“Create your icon or revert back to the original image”);
}
function cropImage(e:Event):void
{
defineCrop(dynamicW, dynamicH, dynamicX, dynamicY);
}
function mouseUpHandler(e:MouseEvent):void
{
e.currentTarget.stopDrag();
dynamicX = e.currentTarget.x;
dynamicY = e.currentTarget.y;
}
function mouseMoveHandler(e:MouseEvent):void
{
dynamicX = e.currentTarget.x;
dynamicY = e.currentTarget.y;
dynamicW = e.currentTarget.width;
dynamicH = e.currentTarget.height;
trace (“dynamic X from move” + dynamicX); // new X after move test 205
trace (“dynamic Y from move” + dynamicY); // new Y after move test 140
trace (“dynamic W from move” + dynamicW);
trace (“dynamic H from move” + dynamicH);// new Y after move test 140
//defineCrop(dynamicW, dynamicH, dynamicX, dynamicY);
}
// call drag function
dragger(holder_mc);
// slider functionality
var slider:Slider = new Slider();
slider.addEventListener(SliderEvent.CHANGE, onSliderChange);
slider.width = 176;
slider.minimum = 25; // 25% size CAN THEIS CHANGE TO A NUMBER
slider.maximum = 100; // 100% size
slider.value = 100;
slider.liveDragging = true;
slider.x = 140; // center
slider.y = 276;
addChild(slider);
slider.getChildAt(1).width = 5;
slider.getChildAt(1).height = 8;
// set the x y of the image (could do this onload)
function onSliderChange(e:SliderEvent):void
{
scaleClip(slider.value, dynamicX, dynamicY);
dynamicX = holder_mc.x;
dynamicY = holder_mc.y;
trace ("x " + dynamicX); // new X after move test 205
trace ("y " + dynamicY); // new Y after move test 140
}
// scale image from center
function scaleClip(val:int, dynamicX:Number, dynamicY:Number):void
{
var trueScl:Number = val/100;
holder_mc.scaleX = holder_mc.scaleY = trueScl;
holder_mc.x = clipNativeX-holder_mc.width*.5; //change to dynamicX - pass
holder_mc.y = clipNativeY-holder_mc.height*.5; //change to dynamicY -pass
dynamicX = holder_mc.x;
dynamicY = holder_mc.y;
dynamicW = holder_mc.width;
dynamicH = holder_mc.height;
trace("dynamicX from scale " + dynamicX);
trace("dynamicY from scale " + dynamicY);
trace("dynamicW from scale " + dynamicW);
trace("dynamicH from scale " + dynamicH);
//defineCrop(dynamicW, dynamicH, dynamicX, dynamicY)
}
// cropping calculations
function defineCrop(dynamicW:Number, dynamicH:Number, dynamicX:Number, dynamicY:Number):void
{
var newX = holder_mc.x - holderXStart; // need to find the place before it is moved
var newY = holder_mc.y - holderYStart;
var imageBMPData:BitmapData;
var bmpWidth:int = Math.abs(cropAreaW);
var bmpHeight:int = Math.abs(cropAreaH);
imageBMP = new BitmapData(holder_mc.width,holder_mc.height);
imageBMP.draw(holder_mc, new Matrix());
var cropAreaX:Number = (holderW/2) - (cropAreaW/2); //done
var cropAreaY:Number = (holderH/2) - (cropAreaH/2); //done
imageBMPData = new BitmapData(cropAreaW, cropAreaH);
imageBMPData.copyPixels(imageBMP, new Rectangle(cropAreaX - newX,cropAreaY - newY,cropAreaW,cropAreaH), new Point(0,0));
createCrop(imageBMPData);
}
function createCrop(imgd:BitmapData)
{
// Setup a holder mc to hold the clipped image
holder = new MovieClip();
addChild(holder);
var cropClip:Bitmap = new Bitmap(imgd);
holder.addChild(cropClip);
}