canvas draw

需求
1 加载图像显示到canvas中心
2 对其放大移动旋转操作
3 支持对图像画各种图形标记
4 支持查看这些标记的坐标(相对于图像)

代码思路:
1 根据canvas宽高,计算图像宽高,画到中心,图像scale值1 angle值0 translate值0(正向运算 scale -> rotate -> translate )
2 点击获取点在图像上的坐标:( 反向运算 (point - translate) /scale / angle - clientOffset ),放大旋转的中心点是canvas的中心,clientOffset是因为图像显示在中心了,需要计算左上点offset值
3 把图形标记好后,渲染出来,正向运算 (point + clientOffset) * scale * rotate + translate )

核心代码:

// 鼠标点击canvas获取图片坐标
function convertPoint (canvasPoint){

	canvasPoint=canvasPoint.subtract( Vector.create(imgConfig.translate) )

	var left=(config.canvasW-imgConfig.width)/2;
	var top=(config.canvasH-imgConfig.height)/2;

	var clientOff=Vector.create([left,top] )

    var cansCenter=Vector.create( [config.canvasW/2,config.canvasH/2] );
	var newDot=scale(canvasPoint, 1/imgConfig.scaleVal,cansCenter);
	newDot=rotate(newDot,-imgConfig.angle,cansCenter);
	return newDot.subtract(clientOff);
}
//拿到图片上点的位置 算出绘画的坐标
function getCanvasPonit(imgPoint){
	var left=(config.canvasW-imgConfig.width)/2;
	var top=(config.canvasH-imgConfig.height)/2;
	var clientOff=Vector.create([left,top] );
	var cans=imgPoint.add(clientOff)

	var cansCenter=Vector.create( [config.canvasW/2,config.canvasH/2] )

	var newDot=scale(cans,imgConfig.scaleVal,cansCenter);
	newDot=rotate(newDot,imgConfig.angle,cansCenter);
	return newDot.add(  Vector.create(imgConfig.translate) ) ;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值