Android Matrix类实现J2ME的drawRegion的镜像方法【新一则】
先说说drawRegion方法:
?
1. 对称于Y轴
????其变换矩阵:
????
????
???
??? 其变换为:
? ??
?
2. 对称于X轴:
????
??
?
3. 对称于原点O:
???
?
4.?对称于直线y=x:?
???
?
5. 对称于直线y=-x:
????
?
二、drawRegion方法的实现
?
public void drawRegion(Image image_src, int x_src, int y_src, int width, int height, int transform, int x_dest, int y_dest, int anchor) {if ((anchor & VCENTER) != 0) {y_dest -= height / 2;} else if ((anchor & BOTTOM) != 0) {y_dest -= height;}if ((anchor & RIGHT) != 0) {x_dest -= width;} else if ((anchor & HCENTER) != 0) {x_dest -= width / 2;}//Bitmap newMap = Bitmap.createBitmap(image_src.getImage(), x_src, y_src,width, height);/* * 这里没有使用create 而是用canvas的clipRect方法来实现扣图的效果 * 使用了save为后面恢复剪裁区用 */g.save();g.clipRect(x_dest, y_dest, x_dest+width, y_dest+height);Matrix mMatrix = new Matrix();Matrix temp = new Matrix();float[] mirrorY = { -1, 0, 0, 0, 1, 0, 0, 0, 1 };temp.setValues(mirrorY);switch (transform) {case SpriteX.TRANS_NONE:break;case SpriteX.TRANS_ROT90:mMatrix.setRotate(90, width / 2, height / 2);break;case SpriteX.TRANS_ROT180:mMatrix.setRotate(180, width / 2, height / 2);break;case SpriteX.TRANS_ROT270:mMatrix.setRotate(270, width / 2, height / 2);break;case SpriteX.TRANS_MIRROR:mMatrix.postConcat(temp);break;case SpriteX.TRANS_MIRROR_ROT90:mMatrix.postConcat(temp);mMatrix.setRotate(90, width / 2, height / 2);break;case SpriteX.TRANS_MIRROR_ROT180:mMatrix.postConcat(temp);mMatrix.setRotate(180, width / 2, height / 2);break;case SpriteX.TRANS_MIRROR_ROT270:mMatrix.postConcat(temp);mMatrix.setRotate(270, width / 2, height / 2);break;}/* * 这里的偏移要注意减去x_src和y_src * 并且调用restore()恢复剪裁区 */mMatrix.setTranslate(x_dest-x_src, y_dest-y_src);g.drawBitmap(image_src.getImage(), mMatrix, p);g.restore();}?
1 楼 yuanzhifei89 2012-02-22 SpriteX.java这个文件能发我一个么?邮箱:563451339@qq.com 2 楼 zhouxiaoli521 2012-02-22 yuanzhifei89 写道SpriteX.java这个文件能发我一个么?邮箱:563451339@qq.com
那个很久没用找不到了
SpriteX.java,这个类只使用了j2me中的canvas里的基本绘图函数,所以只要你实现了j2me的canvas方法就可以用SpriteX.java”
????
?? 

