2
我有Direct2D位圖縮放問題。我使用example從文件中加載了一個位圖,然後我想自己縮放位圖(適合查看保存比例,添加陰影效果...),但Direct2D自動縮放位圖(例如,在調整窗口大小時),我不知道如何以防止這種行爲。如何防止或關閉位圖的direct2d「自動縮放」?
例如,在位圖加載到一個小窗口(CView)後,它會正確填充整個窗口(根據OnDraw),並且當我最大化它時,D2D拉伸我的位圖並丟失位圖質量,最終位圖大大超出窗口的邊界儘管我的OnDraw方法。
void CWDCView::OnDraw(CDC* /*pDC*/)
{
CWDCDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc) return;
HRESULT hr = S_OK;
ID2D1DeviceContext *deviceContext;
pRenderTarget->QueryInterface(&deviceContext); //ID2D1HwndRenderTarget* pRenderTarget
RECT rc = {0,0,0,0};
GetClientRect(&rc);
deviceContext->BeginDraw();
deviceContext->Clear(D2D1::ColorF(D2D1::ColorF(0xC8D2E1, 1.0f)));
D2D1_RECT_F rect={0,0,rc.right,rc.bottom};
deviceContext->DrawBitmap(m_pBitmap,rect); //ID2D1Bitmap *m_pBitmap
deviceContext->EndDraw();
if (hr == D2DERR_RECREATE_TARGET)
{
hr = S_OK;
ReleaseDeviceResources();
}
SafeRelease(&deviceContext);
}
那麼如何防止或關閉這種「自動縮放」呢?
我想補充一點。如果像這樣繪製位圖deviceContext->DrawBitmap(m_pBitmap); /*without rect*/
它只繪製位圖的一部分而不將它安裝到窗口中,但是最大化它時仍然拉伸它。
謝謝您的回答! ID2D1HwndRenderTarget :: Resize解決了這個問題。 – Craftsmann