[转]BitmapData旋转问题
http://bbs.9ria.com/viewthread.php?tid=73912&extra=page%3D1%26amp;orderby%3Ddateline%26amp;filter%3D2592000
通过Loader加载一个图片,然后利用BitmapData对图片旋转90°(不用嵌套sprite方法,因为之后还要对旋转后的图片进行抠图),但是用我的代码最后得出的图像有问题(pic.source=bitmap用来检验输出的图片),这个问题困扰很久了,有没有人帮忙看下.谢谢了
var bData:BitmapData = new BitmapData(loader.width,loader.height);var m:Matrix = bitmap.transform.matrix;var centerX:Number = loader.width / 2;var centerY:Number = loader.height / 2;var centerPoint:Point = new Point(centerX, centerY);var transformPoint:Point = m.transformPoint(centerPoint);m.translate(-transformPoint.x, -transformPoint.y);m.rotate(90*(Math.PI/180));m.translate(transformPoint.x, transformPoint.y);bData.draw(bitmap,m);//bitmap = Bitmap(loader.content);//bitmap = new Bitmap(bData);//pic.source = bitmap;
var loader:Loader=new Loader();this.stage.invalidate();this.stage.addEventListener(Event.RENDER, onRender);function onRender(event:Event):void{ loader.load(new URLRequest("1.png")); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);}function onComplete(event:Event):void{ trace("加载成功了"); var bitmap:Bitmap = loader.content as Bitmap;//原图 var bData:BitmapData = new BitmapData(loader.width,loader.height);//缓存 var m:Matrix = bitmap.transform.matrix; var centerX:Number = loader.width / 2; var centerY:Number = loader.height / 2; m.translate(-centerX, -centerY);//注册点在中心 m.rotate(90*(Math.PI/180));//旋转90度 m.translate(centerY, centerX);//注册点恢复到左上,关键是这里,转晕了吧 bData.draw(bitmap,m); bitmap.bitmapData=bData; addChild(bitmap);}
var loader:Loader=new Loader();this.stage.invalidate();this.stage.addEventListener(Event.RENDER, onRender);function onRender(event:Event):void{ loader.load(new URLRequest("1.png")); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);}function onComplete(event:Event):void{ trace("加载成功了"); var bitmap:Bitmap = loader.content as Bitmap;//原图 switch (-180) { case 90 : bitmap.transform.matrix = new Matrix(Math.cos(Math.PI/2),Math.sin(Math.PI/2), -Math.sin(Math.PI/2),Math.cos(Math.PI/2),loader.height); break; case -90 : bitmap.transform.matrix = new Matrix(Math.cos(-Math.PI/2),Math.sin(-Math.PI/2), -Math.sin(-Math.PI/2),Math.cos(-Math.PI/2),0,loader.width); break; case 180 : case -180 : bitmap.transform.matrix = new Matrix(Math.cos(Math.PI),Math.sin(Math.PI), -Math.sin(Math.PI),Math.cos(Math.PI),loader.width,loader.height); break; } addChild(bitmap);}