gvozden
January 12th, 2007, 07:39 AM
Here is a function which copies pixels from one bitmapdata to another based on rotated rectangle // something like copyPixels but it is doing work with rotated rectangle
it has also optimisation for angle =0 then it uses copyPixels function
function copyRectangle(origBitmap:BitmapData, destBitmap:BitmapData, recX:Number, recY:Number, recW:Number, recH:Number, angle:Number) {
if (angle != 0) {
// degrees > radians
angle = angle*Math.PI/180;
// sin and cos for angle
sinVal = Math.sin(angle);
cosVal = Math.cos(angle);
// going through rectangle pixels
for (i=recX; i<(recX+recW); i++) {
for (j=recY; j<(recY+recH); j++) {
// getting position of original pixel / calculating rotation
Nx = (i-recX)*cosVal-(j-recY)*sinVal;
Ny = (j-recY)*cosVal+(i-recX)*sinVal;
Nx = Math.round(recX+Nx);
Ny = Math.round(recY+Ny);
// getting pixel value with alpha
colVal = origBitmap.getPixel32(Nx, Ny);
// setting pixel value with alpha
destBitmap.setPixel32(i-recX, j-recY, colVal);
}
}
} else {
// optimisation for angle 0, no rotation
destBitmap.copyPixels(origBitmap, new Rectangle(recX, recY, recW, recH), new Point(0, 0));
}
}
for some reason FLA files are big, and I've had this problem earlier so I can't upload 5mb FLA file, anyway I think using a function is easy just like
copyRectangle(myBitmap, myBitmap2, 100, 100, , 150, 200, angle);
examples are here
Angle Random (http://www.primatron.co.yu/as/bitmap_photo/) // using my algo
Angle Zero (http://www.primatron.co.yu/as/bitmap_photo/photo_square.html) // using copyPixles
you can see speed difference
and please don't pay attention of positions of miniphoto or how they come onto screen I wasn't paying attention to it
it has also optimisation for angle =0 then it uses copyPixels function
function copyRectangle(origBitmap:BitmapData, destBitmap:BitmapData, recX:Number, recY:Number, recW:Number, recH:Number, angle:Number) {
if (angle != 0) {
// degrees > radians
angle = angle*Math.PI/180;
// sin and cos for angle
sinVal = Math.sin(angle);
cosVal = Math.cos(angle);
// going through rectangle pixels
for (i=recX; i<(recX+recW); i++) {
for (j=recY; j<(recY+recH); j++) {
// getting position of original pixel / calculating rotation
Nx = (i-recX)*cosVal-(j-recY)*sinVal;
Ny = (j-recY)*cosVal+(i-recX)*sinVal;
Nx = Math.round(recX+Nx);
Ny = Math.round(recY+Ny);
// getting pixel value with alpha
colVal = origBitmap.getPixel32(Nx, Ny);
// setting pixel value with alpha
destBitmap.setPixel32(i-recX, j-recY, colVal);
}
}
} else {
// optimisation for angle 0, no rotation
destBitmap.copyPixels(origBitmap, new Rectangle(recX, recY, recW, recH), new Point(0, 0));
}
}
for some reason FLA files are big, and I've had this problem earlier so I can't upload 5mb FLA file, anyway I think using a function is easy just like
copyRectangle(myBitmap, myBitmap2, 100, 100, , 150, 200, angle);
examples are here
Angle Random (http://www.primatron.co.yu/as/bitmap_photo/) // using my algo
Angle Zero (http://www.primatron.co.yu/as/bitmap_photo/photo_square.html) // using copyPixles
you can see speed difference
and please don't pay attention of positions of miniphoto or how they come onto screen I wasn't paying attention to it