topical media & game development
#graphic-flex-image-effects-03-Flex-CopyPixelsTest.ax
#graphic-flex-image-effects-03-Flex-CopyPixelsTest.ax
[swf]
[flash]
flex
package {
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.net.URLRequest;
[SWF(width=750, height=500, backgroundColor=0x000000)]
Demonstrates BitmapData's copyPixels() by loading an image and displaying a scaled down version.
As the used hovers over the image, a small portion of the full size image is drawn to its right.
public class @ax-graphic-flex-image-effects-03-Flex-CopyPixelsTest extends Sprite {
private var _largeImage:BitmapData;
private var _smallImage:BitmapData;
private var _zoomedImage:BitmapData;
private var _scale:Number;
Constructor. Passes path of image to load to super class.
public function @ax-graphic-flex-image-effects-03-Flex-CopyPixelsTest() {
loadImage("graphic-flex-image-effects-03-assets-canyon.jpg");
}
Loads the specified image.
parameter: imagePath The path to the image to load.
private function loadImage(imagePath:String):void {
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded);
loader.load(new URLRequest(imagePath));
}
Creates scaled down version of loaded image as well as data in which the full size
region will be rendered.
private function createBitmaps():void {
// matrix to scale down loaded image so that it fits on the stage
var matrix:Matrix = new Matrix();
_scale = stage.stageHeight/_largeImage.height;
matrix.scale(_scale, _scale);
// scaled down version that will show whole image
_smallImage = new BitmapData(_largeImage.width*_scale, _largeImage.height*_scale);
// the zoomed region will be the same size as the scaled image
_zoomedImage = _smallImage.clone();
// draw in the scaled down image
_smallImage.draw(_largeImage, matrix);
var bitmap:Bitmap = new Bitmap(_smallImage);
addChild(bitmap);
// add the zoomed region to the scaled down image's right
bitmap = new Bitmap(_zoomedImage);
bitmap.x = bitmap.width;
addChild(bitmap);
}
Draws the zoomed region of the iamge based on the x/y position.
parameter: x The left coordinate of the zoomed region.
parameter: x The top coordinate of the zoomed region.
private function drawZoomedImage(x:Number, y:Number):void {
// make sure that x/y is within limits based on image size
x = Math.min(x, _largeImage.width - _zoomedImage.width);
y = Math.min(y, _largeImage.height - _zoomedImage.height);
// the region to draw
var rectangle:Rectangle = new Rectangle(x, y, _zoomedImage.width, _zoomedImage.height);
_zoomedImage.copyPixels(_largeImage, rectangle, new Point());
}
Handler for when the mouse moves. This updates the zoomed image if the mouse
is over the scaled down image.
parameter: event Event dispatched by stage.
private function onStageMouseMove(event:MouseEvent):void {
var x:Number = event.localX;
var y:Number = event.localY;
// only update zoomed image if mouse is over scaled down image
if (getChildAt(0).hitTestPoint(x, y)) {
drawZoomedImage(x/_scale, y/_scale);
}
}
Handler for when the image loads. This calls the methods to create and draw the bitmaps
and sets up a listener for when the mouse moves.
parameter: event Event dispatched by stage.
private function onImageLoaded(event:Event):void {
var loaderInfo:LoaderInfo = event.target as LoaderInfo;
var bitmap:Bitmap = loaderInfo.content as Bitmap;
// save data for loaded, large image, which will be used to draw the zoomed region
_largeImage = bitmap.bitmapData;
createBitmaps();
// initial zoomed region will be top left of loaded bitmap
drawZoomedImage(0, 0);
stage.addEventListener(MouseEvent.MOUSE_MOVE, onStageMouseMove);
}
}
}
(C) Æliens
04/09/2009
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.