我必须在屏幕外位图上绘制形状,但是当我尝试渲染位图时遇到一个奇怪的问题。
这就是图像的显示方式:
这就是我查看位图的方式:
以下是我用来创建位图画笔的代码:
const auto size = renderTarget->GetSize();
const auto pxSize = D2D1::SizeU(size.width * 4, size.height * 4);
ID2D1BitmapRenderTarget* compatibleRenderTarget;
HRESULT hr = renderTarget->CreateCompatibleRenderTarget(size, pxSize, &compatibleRenderTarget);
if (SUCCEEDED(hr))
{
// compute visible area and the current transformation matrix
const auto area = get_visible_area(renderTarget);
const auto transform = D2D1::Matrix3x2F::Identity();
// offscreen bitmap rendering
compatibleRenderTarget->BeginDraw();
// draw all shapes
compatibleRenderTarget->EndDraw();
// Retrieve the bitmap from the render target.
ID2D1Bitmap* bitmap;
hr = compatibleRenderTarget->GetBitmap(&bitmap);
// release the compatible render target
compatibleRenderTarget->Release();
// Create the bitmap brush
ID2D1BitmapBrush* bitmapBrush = nullptr;
hr = renderTarget->CreateBitmapBrush(bitmap, D2D1::BitmapBrushProperties(), &bitmapBrush);
bitmap->Release();
// draw bitmap
renderTarget->FillRectangle(area, bitmapBrush);
}
该效果是标准行为的结果。如果您使用位图画笔,您可以选择不同的扩展模式(默认为钳位)。这定义了如果几何尺寸超过位图尺寸(如您使用 FillRect() 的情况)会发生什么。您必须在中定义 X 轴和 Y 轴的扩展模式D2D1_BITMAP_BRUSH_PROPERTIES您要传递到的结构ID2D1RenderTarget::CreateBitmapBrush().
您可以选择(如这里所述 https://msdn.microsoft.com/en-us/library/windows/desktop/dd368100%28v=vs.85%29.aspx):
- 夹紧(重复位图的最后一行)
- 换行(平铺位图)
- Mirror
如果您不希望位图被夹紧或包裹,您可以使用ID2D1RenderTarget::DrawBitmap()方法代替。
Edit: If 源矩形不同于目的地 矩形在大小上,位图将被拉伸。您可以通过指定来调整拉伸质量(算法)D2D1_BITMAP_INTERPOLATION_MODE。我认为它默认为最近邻,但线性插值的质量更好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)