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的左上角。
分享到:
相关推荐
对图像做仿射变换,来实现对图像更好的处理,这是主程序cpp
主要介绍了Java中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 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....
AffineTransform对象, AffineTransform对象使您可以定义旋转或倾斜的坐标系。
1.1. Graphics2d 方式 1.2. AffineTransform 方式 1.3 参考
Java实现图片的拖拉变形放大缩小,四个方向都可以拉大缩小图片,技术方面,使用java.awt.geom 包中的AffineTransform 类来实现图片拖拉缩放功能。
import java.awt.geom.AffineTransform; import java.io.*;//数据流、序列化和文件系统提供系统输入和输出 import java.util.ArrayList;//最大限度地减少实现“随机访问”数据存储(如数组)支持的该接口所需的工作...
图片上传到服务器后,会根据情况将图片缩小成一个图标,我们可以利用java强大的图形处理功能,对上传的图片进行缩放处理。本文的程序使用jdk1.4中最新的ImageIO对图片进行读写,使用AffineTransform对图片进行缩放。
AffineTransform trans = new AffineTransform(); trans.rotate(random.nextInt(45) * 3.14 / 180, 15 * i + 10, 7); // 缩放文字 float scaleSize = random.nextFloat() + 0.8f; if (scaleSize > 1.1f) scale...
它使用AffineTransform类来移动和旋转几何对象,这就是为什么它在算法上不快的原因。 音乐来自Freesound.org。 在游戏中,音乐由orangefreesound制作,其名称为“ 115 bpm的电子音乐循环”。 激光射击声是由...
实现AffineTransform类 实现最近邻插值类 实现双线性插值层 在GeometricTransformer类中实现Transform函数 放大和缩小图像 调整图像大小 围绕中心旋转图像(保留图像内容) 围绕中心旋转图像(不保留图像内容) ...
摘要:Java源码,图形操作,图片拉伸,图像放大 Java拉伸缩放图像,滑动滑块时,图像实时地在相应的方向上拉伸...具体来说是使用java.awt.geom 包中的AffineTransform 类,来实现图像的拉伸缩放。 运行环境:Java/Eclipse
import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import ...
随机生成四位数验证码,包括汉字,数字,英文大小写。 1.Servlet类 ...import java.awt.geom.AffineTransform; import java.awt.geom.Line2D; import java.awt.image.BufferedImage; import java.i
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 MapX 的新增功能 ....关于 MapInfo ....第 1 章: MapX 简介 ....地图绘制简介 ....使 MapX 适合您工作 ....主要功能概述 ....学习 MapX....第 2 章: MapX 基础 ....Map 对象 ....