图片以鼠标为中心坐标缩放代码


void DocEditor::Zoom(bool zoomIn, int iMouseX, int iMouseY)
{
	QSize szWin = size();
	if (iMouseX < 0)
		iMouseX = szWin.width() / 2;
	if (iMouseY < 0)
		iMouseY = szWin.height() / 2;

	m_iOrgX = (iMouseX - m_iX) / m_fScale;
	m_iOrgY = (iMouseY - m_iY) / m_fScale;

	float scale = 1.0f;
	if (zoomIn) {
		scale = 2.0f;
	}
	else {
		scale = 0.5f;
	}

	scale = m_fScale * scale;
	float limit = 128.0f;
	if (scale > limit)
		scale = limit;
	if (scale < 1.0f / limit)
		scale = 1.0f / limit;

	//int orgX = m_iBmpMoveX / m_fScale;
	//int orgY = m_iBmpMoveY / m_fScale;
	if (m_fScale != scale)
	{
		m_fScale = scale;
		m_iX = iMouseX - m_iOrgX * m_fScale;
		m_iY = iMouseY - m_iOrgY * m_fScale;
		//m_iBmpMoveX = offsetX * m_fScale;
		//m_iBmpMoveY = offsetY * m_fScale;
		OnUpdate();
		NotifyUpdateThread();
	}
}

void DocEditor::wheelEvent(QWheelEvent * event)
{
	int iMouseX = event->x();
	int iMouseY = event->y();
	Zoom(event->delta() > 0, iMouseX, iMouseY);
}

这里是我用wpf实现的鼠标滚轮绽放。
链接:https://download.csdn.net/download/mycn027/11975557

另外本人可代写各类编辑器,付点小费即可,需要可联系我哦。

 

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值