缩放图像在HTML5画布
Scaling Images in HTML5 canvas
我有许多对象,它们代表我想在画布上绘制的图像。每个对象都有一个X, Y, Scale属性,以及一个传递画布对象的渲染方法。然后画布标签被传递给每个对象的渲染方法,它们都需要将自己渲染到画布上。
我的问题是缩放是从画布的原点完成的,而不是图像的原点。为了解决这个问题,我尝试了以下方法:
canvas.translate(-this.X, -this.Y);
canvas.scale(this.Scale, this.Scale);
canvas.translate(this.X, this.Y);
上面的代码的问题是,它看起来就像你只能有一个翻译和第三行,应该移动对象回到原来的位置成为翻译时调用drawImage。如果我删除第三行,我得到了正确的缩放原点,但图像被移动到0,0,而不是在正确的位置呈现。
做这种缩放的正确方法是什么?
尝试:
canvas.translate(this.X, this.Y);
canvas.scale(this.Scale, this.Scale);
canvas.translate(-this.X, -this.Y);
但是请记住,这样做你将需要做很多ctxt.save();
和ctxt.restore();
s,如果你得到了图像的宽度和高度,你可以简单地做ctxt.drawImage(this.image, this.X, this.Y, this.Width*this.Scale, this.Height*this.Scale);
,因为你不需要打乱上下文状态堆栈,它可能更快。
变换不影响原点。实际情况是,它们必须以相反的顺序应用。请记住,这些方法只是在转换堆栈中堆叠矩阵的快捷方式。
相关文章:
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- HTML5在画布中加载较小的图像并保存实际大小的图像
- JavaScript HTML5画布未显示
- html5画布动画无法正常工作
- 在HTML5画布上添加按钮和控件
- 如何在运行时在HTML5画布中绘制正方形
- 多层画布HTML5
- 如何在画布 html5 中呈现套接字数据
- 存储来自画布 html5 的大尺寸图像
- 如何在画布 HTML5 中使用触摸事件
- 画布 html5 中的透明度上下文.填充样式
- 在画布HTML5中查找上传的宽度和高度图像.(带文件读取器)
- 将文本字段添加到画布 HTML5
- 从画布 html5 中上传的图像中删除拖动属性(将区域设置为上传的图像)
- 在鼠标画布HTML5上
- 图像画布HTML5
- 在没有闪烁的情况下重新绘制画布html5
- 模板的画布html5/jquery/javascript
- 拖放到画布 HTML5 上
- 如何绘制一个动画线出现在画布html5