good morning fellow flexers.
I've been struggling for the last 3 days with a very frustrating problem.
In a photo manipulation project, I use a canvas where I handle images.
So, an image is displayed in a canvas and I want to add a new image on top of
it, let's say a cool wood-looking frame. The first image is a jpg embedded but
the second image, the frame, is a transparent 32bits png file loaded on demand.
The png file is transparent, as far as I can tell in photoshop. Yet, when I
load it, all the transparent bits appear white.
This problem is making me crazy and I don't know how to handle it. Any help
would be appreciated.
Bellow are parts of my code :
In the canvas handling the images :
->loading the image
public function setImageFrame (AnImageSource : String) : void
{
var request:URLRequest = new URLRequest(AnImageSource);
frameImage = new Image() ;
frameImage.addEventListener(Event.COMPLETE, onFrameReceptionComplete) ;
frameImage.load(AnImageSource);
}
-> Adding the loaded image to the canvas
private function onFrameReceptionComplete (event : Event) : void
{
var bounds : Rectangle = new Rectangle(0,0,this.width,this.height);
var rawFrame : Bitmap = Bitmap(frameImage.content );
var rawBitmapDataFrame : BitmapData = new BitmapData (rawFrame.width ,
rawFrame.height , true,0x00000000) ;
rawBitmapDataFrame.draw(rawFrame) ;
//display true
trace (rawBitmapDataFrame.transparent);
rawFrame = new Bitmap(rawBitmapDataFrame) ;
frameImage.source = LCUtilTools.cropAndResizeImage(rawFrame , bounds);
//display true
trace (Bitmap(frameImage.source).bitmapData.transparent);
frameImage.smoothBitmapContent = true;
this.addChild(frameImage);
}
the cropAndResize function (used to resize the image to the correct ratio.
public static function cropAndResizeImage (AnImage : Bitmap , ABounds :
Rectangle) : Bitmap
{
var celluleRawBitmap : BitmapData = AnImage.bitmapData
var originalWidth:Number = celluleRawBitmap.width;
var originalHeight:Number = celluleRawBitmap.height;
var newWidth:Number = originalWidth;
var newHeight:Number = originalHeight;
var scale : Number ;
var m:Matrix = new Matrix();
var scaleX:Number = 1;
var scaleY:Number = 1;
if (originalWidth > ABounds.width || originalHeight > ABounds.height)
{
scaleX = ABounds.width / celluleRawBitmap.width;
scaleY = ABounds.height / celluleRawBitmap.height;
scale = Math.max(scaleX, scaleY);
newWidth = originalWidth * scale;
newHeight = originalHeight * scale;
}
m.scale(scale,scale);
var zoomArea : Rectangle ;
zoomArea = celluleRawBitmap.rect ;
zoomArea.inflate(ABounds.width , ABounds.height);
var editedBitmapData : BitmapData = new BitmapData (ABounds.width ,
ABounds.height , true ,0x00FFFFFF);
editedBitmapData.draw(AnImage.bitmapData,m);
return ( new Bitmap(editedBitmapData));
}
Any help would be really appreciated, I really don't know what to do or where
to begin in order to solve this issue.