使用子像素级别精度的图像绘图 Graphics2D
目前,我试图以正常的速度在屏幕上绘制图像,如视频游戏。
不幸的是,由于图像移动的速度,一些帧是相同的,因为图像尚未移动到完整的像素。
有没有办法提供
价值 Graphics2D 要在屏幕上显示图像,而不是
价值观?
最初,这就是我所做的:
当然,这是阈值,所以图片不会在像素之间移动,并从一个到另一个。
以下方法是在纹理上设置涂料的颜色并在指定位置绘制。 不幸的是,这导致了不正确的结果显示瓷砖,而不正确平滑。
我必须做些什么来达到亚像素渲染的所需效果 Java?
不幸的是,由于图像移动的速度,一些帧是相同的,因为图像尚未移动到完整的像素。
有没有办法提供
float
价值 Graphics2D 要在屏幕上显示图像,而不是
int
价值观?
最初,这就是我所做的:
BufferedImage srcImage = sprite.getImage / /;
Position imagePosition = ... ; //Defined elsewhere
g.drawImage / srcImage, /int/ imagePosition.getX//, /int/ imagePosition.getY// /;
当然,这是阈值,所以图片不会在像素之间移动,并从一个到另一个。
以下方法是在纹理上设置涂料的颜色并在指定位置绘制。 不幸的是,这导致了不正确的结果显示瓷砖,而不正确平滑。
g.setRenderingHint / RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON /;
BufferedImage srcImage = sprite.getImage / /;
g.setPaint / new TexturePaint / srcImage, new Rectangle2D.Float / 0, 0, srcImage.getWidth / /, srcImage.getHeight / / / / /;
AffineTransform xform = new AffineTransform / /;
xform.setToIdentity / /;
xform.translate / onScreenPos.getX / /, onScreenPos.getY / / /;
g.transform / xform /;
g.fillRect/0, 0, srcImage.getWidth//, srcImage.getHeight///;
我必须做些什么来达到亚像素渲染的所需效果 Java?
没有找到相关结果
已邀请:
4 个回复
奔跑吧少年
赞同来自:
和
, 绘制缓冲图像,然后在事件中绘制缓冲图像到组件 paint.
查看我在这里的完整举例:
http://pastebin.com/hSAkYWqM
卫东
赞同来自:
通常画画 a sprite 在地点 /a, b/, 你会做这样的事情:
要执行子像素渲染,您执行相同的周期,但要考虑子像素位移,如下所示:
功能 bilinearInterp// 它看起来像这样:
它不应该使用额外的内存,但将需要额外的时间渲染。
詹大官人
赞同来自:
最初我有以下代码在哪里
转换为坐标系 16:9 在调用该方法之前:
但是,如质疑kaushik shankar所指出的,双重位置进入整数的转换使图像 "jump" 在整数中,双重测量的转换使其大规模 "jumpy" /为什么,该死的
不拿双胞胎?!/. 我发现了,为我工作如下:
虽然看起来像是一种愚蠢的方式。
裸奔
赞同来自:
当您在内存中绘制大图像时,您将其复制并将其封装成较小的渲染,以最终用户可见。
例如:图像 100x100 它的模拟与尺寸 / 重新样本 50x50:
厘米。:
http://en.wikipedia.org/wiki/R ... %2529