AS3.0中Matrix类的学习经验(改变注册点、旋转图像)

摘要:
虽然可以通过使用矩阵转换方法来更改注册点,但AS3.0实际上不会更改注册点。配准点仍然位于(0,0)点,但它将在旋转和缩放的中心具有配准点的效果。保存图像时,AS3.0会将图像的注册点与BitmapData对象的左上角对齐,这样可以很容易地想象保存的图像会是什么样子!如果图像未旋转且配准点位于(0,0),则应将其完美保存在图像中;一旦你向任何方向旋转,你将看不到任何东西,因为图像的内容已经超出了BitmapData的范围!

1.如何使用Matrix类来改变注册点:

    做相册功能时一开始最烦的就是注册点在(0,0)的位置,为了能方便的旋转、缩放操作,需要将注册点移动到中心,参考雪の猫的方法,做了简化:

AS3.0中Matrix类的学习经验(改变注册点、旋转图像)第1张AS3.0中Matrix类的学习经验(改变注册点、旋转图像)第2张代码
var ōbj=this.myImageBitmap; //要改变的图片或影片剪辑
var matrix:Matrix = obj.transform.matrix;
matrix.tx
=0;
matrix.ty
=0;
var halfW:Number 
= obj.width/2;
var halfH:Number  
= obj.height/2;
matrix.translate(
-1*halfW,-1*halfH);

    这样在旋转、缩放的操作时能看到注册点居中的效果,实际上就是利用transale函数将matrix属性的tx、ty值往左上角方向移动半个宽度和高度;

2.保存图像时为何一旦做过旋转操作就会看不到图片?

    虽然用matrix平移的方法能改变注册点,而实际上AS3.0并没有能真正改变注册点(网上的其他方法也是),注册点还是在(0,0)点的,不过是这样对旋转、缩放会有注册点在中心的效果罢了。但是,一旦使用rorate函数进行了旋转,这个边角的注册点却会跟着移动,比如,将图片顺时针方向转90度,那么,原来在左上角的注册点,却会移动到右上角去了!

    而保存图像的时候,AS3.0是将图片的注册点跟你的BitmapData对象的左上角对齐,这就不难想像保存后的图像会是什么样子了!如果图像没旋转,注册点就在(0,0),那保存在图像应该很完美;一旦向任意一个方向做了旋转,那么你将什么也看不到,因为图像的内容已经跑到BitmapData的范围之外了!

    解决方法,就是在保存的时候,当调用BitmapData的draw(myImageBitmap.bitmapData, new Matrix() )方法写入图像时,将传入的Matrix再做一次正确的平移。

    比如假设前提是只做每次90度旋转(像xp自带图片浏览器的旋转功能一样),那么在执行保存函数前做一次计算和平移,下面是简单的算法:

AS3.0中Matrix类的学习经验(改变注册点、旋转图像)第3张AS3.0中Matrix类的学习经验(改变注册点、旋转图像)第4张代码
var tx:Number = myMatrix.tx, ty:Number = myMatrix.ty;
var tx1:Number 
= 0, ty1:Number = 0;
if (tx < 0 && ty < 0)
{
    tx1 
= -1 * tx;
    ty1 
= -1 * ty;
}
else if (tx > 0 && ty < 0)
{
    tx1 
= tx;
    ty1 
= -1 * ty;
}
else if (tx > 0 && ty > 0)
{
    tx1 
= tx;
    ty1 
= ty;
}
else if (tx < 0 && ty > 0)
{
    tx1 
= -1 * tx;
    ty1 
= ty;
}
myMatrix.translate(tx1, ty1)

     然后调用BitmapData的draw方法 写入,在执行保存函数,应该就可以查看到正确的图像了。

免责声明:文章转载自《AS3.0中Matrix类的学习经验(改变注册点、旋转图像)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇源码编译安装nginx及设置开机启动项最强大的王爽汇编语言学习环境使用教程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

图片的放大缩小

布局文件 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_par...

深度前馈网络

本文首发自公众号:RAIS,点击直接关注。 前言 本系列文章为《Deep Learning》读书笔记,可以参看原书一起阅读,效果更佳。从本文开始将继续学习本书的第二部分,将从第一部分介绍深度学习所需要的基础知识过渡到构建深度网络,是理论的应用与提高。 深度前馈网络 也叫 多层感知机 或者是 前馈神经网络,是典型的深度学习模型。这种模型是一种前向的映射模型,...

机器学习

概述 命名实体识别在NLP的应用中也是非常广泛的,尤其是是information extraction的领域。Named Entity Recognition(NER) 的应用中,最常用的一种算法模型是隐式马可夫模型(Hidden Markov Modelling)- HMM。本节内容主要是通过介绍HMM的原理,以及应用HMM来做一个NER的实例演示。 H...

Android中图像变换Matrix的原理

转载自:http://blog.csdn.net/pathuang68/article/details/6991867 在Android中,如果你用Matrix进行过图像处理,那么一定知道Matrix这个类。Android中的Matrix是一个3 x 3的矩阵,其内容如下:   Matrix的对图像的处理可分为四类基本变换: Translate  ...

android Bitmap用法总结

1、Drawable→Bitmap public staticBitmap drawableToBitmap(Drawable drawable) { Bitmap bitmap =Bitmap .createBitmap( drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(),...

多分类问题中混淆矩阵(Confusion Matrix)的Matlab画法 | 丕子

在多分类问题中,有一种很实用的分类问题结果统计图。比如说多类别文类问题,那么每一个类别分到其他类别都有一些数据,但是分到自己类别的毕竟多,这样计算百分比之后就形成了一个矩阵,如果分类正确率高的话,那么对角线上的元素的值,也就是自己到自己的那一部分,value就大。我最近也在做多分类问题,要画这样的图,但是发现确实很少有代码,自己画的确实不好看,还牵扯到值的...