积极答复者
请问在缩放时候如何控制从图片的中央缩放,而不是左上角开始缩放,具体请看Skydrive上的Demo

问题
-
请问在缩放时候如何控制从图片的中央缩放,而不是左上角开始缩放,具体请看Skydrive上的Demo
上述demo的效果是缩放和平移在图片的范围;
目前缩放只能从左上角开始,但是我需要缩放图片是从图片的正面开始缩放,请问如何才能控制呢?
D2D1_MATRIX_3X2_F scale = D2D1::Matrix3x2F::Scale(D2D1::SizeF(m_dScale, m_dScale), D2D1::Point2F(0.0f, 0.0f)); D2D1_MATRIX_3X2_F translation = D2D1::Matrix3x2F::Translation(m_iOffsetX, m_iOffsetY); g_pRenderTarget->SetTransform(scale* translation); D2D1_POINT_2F upperLeftCorner = D2D1::Point2F(0.0f, 0.0f); // Draw bitmap g_pRenderTarget->DrawBitmap( g_pBitmap, D2D1::RectF( upperLeftCorner.x, upperLeftCorner.y, upperLeftCorner.x + size.width, upperLeftCorner.y + size.height) );
我Demo的下载地址如下:(注:运行时需要GyrometerSensor)
Demo是:ZoomPanDesktopD2DApp.7z文件
https://onedrive.live.com/?cid=d2327ea047e691b7#cid=D2327EA047E691B7&id=D2327EA047E691B7%21105
全部回复
-
你好,
请问你是如何解决的,能否分享一下你的方案,十分感谢。
We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
Click HERE to participate the survey. -
void ZoomPanImage() { if (m_dScale > 1) { if (m_dScale > 4) m_dScale = 4; } CreateD2DResource(g_Hwnd); g_pRenderTarget->BeginDraw(); // Clear background color to white g_pRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::White)); D2D1_SIZE_F size = g_pBitmap->GetSize(); float availX = static_cast<float>(size.width * (m_dScale - 1)); float availY = static_cast<float>(size.height * (m_dScale - 1)); if (m_iOffsetX >= availX/2) { m_iOffsetX = availX / 2; } else if (m_iOffsetX <= -availX / 2) { m_iOffsetX = -availX / 2; } else if ((m_iOffsetX < availX / 2) && (m_iOffsetX > -availX / 2)) { } if (m_iOffsetY >= availY / 2) { m_iOffsetY = availY / 2; } else if (m_iOffsetY <= -availY / 2) { m_iOffsetY = -availY / 2; } else if ((m_iOffsetY < availY / 2) && (m_iOffsetY > -availY / 2)) { } D2D1_MATRIX_3X2_F scale = D2D1::Matrix3x2F::Scale(D2D1::SizeF(m_dScale, m_dScale), D2D1::Point2F(size.width / 2, size.height / 2)); D2D1_MATRIX_3X2_F translation = D2D1::Matrix3x2F::Translation(m_iOffsetX, m_iOffsetY); g_pRenderTarget->SetTransform(scale* translation); D2D1_POINT_2F upperLeftCorner = D2D1::Point2F(0.f, 0.f); // Draw bitmap g_pRenderTarget->DrawBitmap( g_pBitmap, D2D1::RectF( upperLeftCorner.x, upperLeftCorner.y, upperLeftCorner.x + size.width, upperLeftCorner.y + size.height) ); HRESULT hr = g_pRenderTarget->EndDraw(); if (FAILED(hr)) { MessageBox(NULL, "Draw failed!", "Error", 0); return; } }