gpt4 book ai didi

c++ - 如何防止或关闭位图的 direct2d "autoscaling"?

转载 作者:太空狗 更新时间:2023-10-29 23:02:44 24 4
gpt4 key购买 nike

我在 Direct2D 位图缩放方面遇到问题。我使用那个 example 从一个文件中加载了一个位图,然后我想自己缩放位图(适合查看保存比例,添加阴影效果......)但是 Direct2D 自动缩放位图(例如,在调整窗口大小时),我不知道如何防止这种行为。

例如,位图加载到一个小窗口 (CView) 后,它正确地填充了整个窗口(根据 OnDraw),当我最大化它时,D2D 拉伸(stretch)我的位图,但位图质量下降,最后位图大大超出了窗口的边界,尽管我的 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*/ 它只绘制位图的一部分而不将其放入窗口,但是当最大化它时无论如何都会拉伸(stretch)它。

最佳答案

渲染目标不能自动调整大小。在您的情况下,您正在更改窗口的大小,但这不会导致“附加”渲染目标大小发生变化。

您应该处理窗口的调整大小事件,然后您有两种可能性:

  1. 使用新尺寸重新创建渲染目标。
  2. 使用ID2D1HwndRenderTarget::ResizeIDXGISwapChain::ResizeBuffers

此外,您可以检查:

关于c++ - 如何防止或关闭位图的 direct2d "autoscaling"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27648767/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com