[转]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;



莫非又是跨域。因为我觉得,使用了Loader的图片,不旋转没事,一转就有问题,就说明你draw了不该draw的东西。



应该是被转晕了,所以才少了。
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);
}



后来发现其实不用draw,因为draw来draw去,cpu比较累。还是设置下matrix比较省。

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);
}

你可能感兴趣的:(PHP,bbs)