`

AffineTransform setToTranslation

阅读更多
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
import javax.swing.JComponent;
import javax.swing.JFrame;

public class MainClass {
	public static void main(String[] args) {
		JFrame jf = new JFrame("Demo");
		Container cp = jf.getContentPane();
		MyCanvas tl = new MyCanvas();
		cp.add(tl);
		jf.setSize(300, 200);
		jf.setVisible(true);
                jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}

class MyCanvas extends JComponent {
	Shape shape;

	public MyCanvas() {
		shape = create();
	}

	protected Shape create() {
		float cm = 72 / 2.54f;
		return new Rectangle2D.Float(cm, cm, 2 * cm, cm);
	}

	public void paint(Graphics g) {
		Graphics2D g2 = (Graphics2D) g;

		g2.setPaint(Color.black);
		g2.draw(shape);

		AffineTransform trans = new AffineTransform();
		trans.setToTranslation(100, 3);

		g2.transform(trans);

		g2.setPaint(Color.red);
		g2.draw(shape);
	}
}

 

红色矩形是变换之后的,这个程序可以一目了然setToTranslation的作用,相当于是将整个坐标系平移,比如游戏中使用到的画Sprite

public void draw(Graphics2D g) {
    // draw background
    g.drawImage(bgImage, 0, 0, null);

    AffineTransform transform = new AffineTransform();
    for (int i = 0; i < NUM_SPRITES; i++) {
        Sprite sprite = sprites[i];

        // translate the sprite
        transform.setToTranslation(sprite.getX(), sprite.getY());

        // if the sprite is moving left, flip the image
        if (sprite.getVelocityX() < 0) {
            transform.scale(-1, 1);
            transform.translate(-sprite.getWidth(), 0);
        }

        // draw it
        g.drawImage(sprite.getImage(), transform, null);
    }

}

 

其中,setToTranslation方法就被用来实时定位Sprite的位置,而

transform.translate(-sprite.getWidth(), 0);

这句是干吗的呢?从字面理解是将Sprite往后移动一个宽度(面向为前,背对为后)。因为按y轴镜面翻转之后,实际Sprite是往左移动了一个宽度,因为原先该transform的原点在sprite的左上角。

 

分享到:
评论

相关推荐

    AffineTransform_仿射变换_AffineTransform_源码

    对图像做仿射变换,来实现对图像更好的处理,这是主程序cpp

    初步解析Java中AffineTransform类的使用

    主要介绍了Java中AffineTransform类的使用,AffineTransform类经常被用来处理图片,需要的朋友可以参考下

    AffineTransform

    /* affprojNR.c - subroutine for fitting affine and projective transforms * using numerical recipes in C routines for solving a set of linear equations. * Some care is taken to generate a well-...

    AffineTransform - MetaTrader 5脚本.zip

    本指标传送价格数据到新的坐标系统上转换价格轴(纵坐标轴)。

    java多种改变字体样式实例

    AffineTransform transform = new AffineTransform(); transform.setToTranslation(w/2-sw/2,h/2); Shape shape = tl.getOutline(transform); g2.setClip(shape); g2.setColor(Color.blue); g2.fill(shape....

    MAXPCANKAO

    AffineTransform对象, AffineTransform对象使您可以定义旋转或倾斜的坐标系。

    liuyueyi#quick-media#图片旋转问题修复1

    1.1. Graphics2d 方式 1.2. AffineTransform 方式 1.3 参考

    Java实现图片的拖拉变形放大缩小.rar

    Java实现图片的拖拉变形放大缩小,四个方向都可以拉大缩小图片,技术方面,使用java.awt.geom 包中的AffineTransform 类来实现图片拖拉缩放功能。

    Java图片查看器 源代码

    import java.awt.geom.AffineTransform; import java.io.*;//数据流、序列化和文件系统提供系统输入和输出 import java.util.ArrayList;//最大限度地减少实现“随机访问”数据存储(如数组)支持的该接口所需的工作...

    JAVA技术:上传图片的缩放处理

    图片上传到服务器后,会根据情况将图片缩小成一个图标,我们可以利用java强大的图形处理功能,对上传的图片进行缩放处理。本文的程序使用jdk1.4中最新的ImageIO对图片进行读写,使用AffineTransform对图片进行缩放。

    基于SpringMVC annotation 的图形验证码

    AffineTransform trans = new AffineTransform(); trans.rotate(random.nextInt(45) * 3.14 / 180, 15 * i + 10, 7); // 缩放文字 float scaleSize = random.nextFloat() + 0.8f; if (scaleSize &gt; 1.1f) scale...

    Simple_asteroids:简单的小行星游戏。 使用Java开发

    它使用AffineTransform类来移动和旋转几何对象,这就是为什么它在算法上不快的原因。 音乐来自Freesound.org。 在游戏中,音乐由orangefreesound制作,其名称为“ 115 bpm的电子音乐循环”。 激光射击声是由...

    dip:使用OpenCVC ++ Python 3进行数字图像处理

    实现AffineTransform类 实现最近邻插值类 实现双线性插值层 在GeometricTransformer类中实现Transform函数 放大和缩小图像 调整图像大小 围绕中心旋转图像(保留图像内容) 围绕中心旋转图像(不保留图像内容) ...

    Java拉伸缩放图像

    摘要:Java源码,图形操作,图片拉伸,图像放大 Java拉伸缩放图像,滑动滑块时,图像实时地在相应的方向上拉伸...具体来说是使用java.awt.geom 包中的AffineTransform 类,来实现图像的拉伸缩放。 运行环境:Java/Eclipse

    java生成带图片的微信二维码

     import java.awt.geom.AffineTransform;   import java.awt.image.AffineTransformOp;   import java.awt.image.BufferedImage;   import java.io.File;   import java.io.IOException;   import ...

    JSP + Servlet实现生成登录验证码示例

    随机生成四位数验证码,包括汉字,数字,英文大小写。 1.Servlet类 ...import java.awt.geom.AffineTransform; import java.awt.geom.Line2D; import java.awt.image.BufferedImage; import java.i

    swing文件拖拽

    import java.awt.geom.AffineTransform; import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; ...

    mapinfo mapx5.0开发指南下

    目 录 欢迎使用... . . . . . . . ....MapInfo MapX 的新增功能 ....关于 MapInfo ....第 1 章: MapX 简介 ....地图绘制简介 ....使 MapX 适合您工作 ....主要功能概述 ....学习 MapX....第 2 章: MapX 基础 ....Map 对象 ....

Global site tag (gtag.js) - Google Analytics