如何防止或关闭位图的 direct2d"自动缩放"?
How to prevent or turn off direct2d "autoscaling" of a bitmap?
我在 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*/
它只绘制位图的一部分,而不将其放入窗口中,但在最大化时,无论如何都会拉伸它。
呈现目标不能自动调整大小。在您的情况下,您正在更改窗口的大小,但这不会导致"附加"呈现目标大小的更改。
您应该处理窗口的 resize 事件,然后您有两种可能性:
- 使用新大小重新创建呈现目标。
- 使用
ID2D1HwndRenderTarget::Resize
或IDXGISwapChain::ResizeBuffers
此外,您还可以检查:
- WM_SIZE后调整呈现目标 Direct2D 的大小
- 在 Windows 中平滑调整窗口大小(使用 Direct2D 1.1)?
相关文章:
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 计算缩放多边形的比例,得到给定的多边形面积
- QwtPlot具有相等的轴和自动缩放
- 如何在directx/c++中进行平移/缩放操作
- 在Qt中实现无限可缩放的画布
- 是否可以为 QPixmap 派生类嵌入缩放方法?
- 形状对象的旋转和缩放不正确C++
- 如何在 OpenSceneGraph 中缩放/旋转/移动资产
- 如何在OpenGL(GLFW,很高兴)中进行2D缩放?
- 改变或缩放两个正态分布以具有特定的相关系数
- SDL2 调整窗口大小后如何缩放鼠标坐标?
- 如何在OpenGL中正确旋转和缩放对象?
- 仅当类型为 std::complex 时,才进行缩放
- 将 VS Code 用于跨平台可缩放C++项目
- 根据帧速率缩放/缩小数字
- 在 c++ 中缩放浮点值
- 如何防止 DirectX C++程序的拉伸/缩放
- 使用提升几何缓冲区缩放多边形时的冗余折点
- 如何在 direct2d 中使用随其窗口重新缩放的效果绘制图像
- 如何防止或关闭位图的 direct2d"自动缩放"?