Copying bitmap data
To copy bitmap data from one image to another, you can use several methods: clone()
, copyPixels()
, copyChannel()
, draw()
, and drawWithQuality()
.
As its name suggests, the clone()
method lets you clone, or sample, bitmap data from one BitmapData object to another. When called, the method returns a new BitmapData object that is an exact clone of the original instance it was copied from.
The following example clones a copy of an orange (parent) square and places the clone beside the original parent square:
import openfl.display.Bitmap;
import openfl.display.BitmapData;
...
var myParentSquareBitmap = new BitmapData (100, 100, false, 0x00ff3300);
var myClonedChild = myParentSquareBitmap.clone ();
var myParentSquareContainer = new Bitmap (myParentSquareBitmap);
this.addChild (myParentSquareContainer);
var myClonedChildContainer = new Bitmap (myClonedChild);
this.addChild (myClonedChildContainer);
myClonedChildContainer.x = 110;
The copyPixels()
method is a quick and easy way of copying pixels from one BitmapData object to another. The method takes a rectangular snapshot (defined by the sourceRect
parameter) of the source image and copies it to another rectangular area (of equal size). The location of the newly "pasted" rectangle is defined within the destPoint
parameter.
The copyChannel()
method samples a predefined color channel value (alpha, red, green, or blue) from a source BitmapData object and copies it into a channel of a destination BitmapData object. Calling this method does not affect the other channels in the destination BitmapData object.
The draw()
and drawWithQuality()
methods draw, or render, the graphical content from a source sprite, movie clip, or other display object on to a new bitmap. Using the matrix, colorTransform, blendMode, and destination clipRect parameters, you can modify the way in which the new bitmap is rendered. This method uses the vector renderer in OpenFL to generate the data.
When you call draw()
or drawWithQuality()
, you pass the source object (sprite, movie clip, or other display object) as the first parameter, as demonstrated here:
myBitmap.draw (movieClip);
If the source object has had any transformations (color, matrix, and so forth) applied to it after it was originally loaded, these transformations are not copied across to the new object. If you want to copy the transformations to the new bitmap, then you need to copy the value of the transform
property from the original object to the transform
property of the Bitmap object that uses the new BitmapData object.