位图正在拉伸,而不是平铺

我想获得一个位图来平铺这样的事情:

---- ---- ---- | || || | ---- ---- ---- 

以下面为例:

 CD2DBitmapBrush* m_pBitBrush; m_pBitBrush = new CD2DBitmapBrush(GetRenderTarget(), _T("grass.bmp")); POINT pt; pt.x = 0; pt.y = 0; CRect rect = new CRect(pt, m_pBitBrush->GetBitmap()->GetSize()); pRenderTarget->FillRectangle(rect, m_pBitBrush); for(int i = 0; i < 5; i++) { pt.x += 40; rect = new CRect(pt, m_pBitBrush->GetBitmap()->GetSize()); pRenderTarget->FillRectangle(rect, m_pBitBrush); } 

当我这样做时,位图显示正确一次,但是之后的每个实例都被“拉伸”(即像素的最后一列被重复,而不是图像的其余部分)。

如果我改变x,最右边的列被重复。 如果我改变y,底部的行会重复。 如果我改变x和y(沿对angular线),angular落像素填充矩形。

 x: ---- ----------- | ||||||||||||| ---- ----------- y: x and y: ---- *----* | | | | ---- *----* ---- ****** ---- ****** ---- ****** 

另外,我试过在第一次调用刷子后使用的图像,原来没有任何东西显示。

 CRect rect = new CRect(pt, m_pBitBrush->GetBitmap()->GetSize()); pRenderTarget->FillRectangle(rect, m_pBitBrush); CD2DBitmap* bit = new CD2DBitmap(GetRenderTarget()/*pRenderTarget*/, _T("stone.bmp")); m_pBitBrush->SetBitmap(bit); for(int i = 0; i < 5; i++) { pt.x += 40; rect = new CRect(pt, m_pBitBrush->GetBitmap()->GetSize()); pRenderTarget->FillRectangle(rect, m_pBitBrush); } 

当然,因为我是新手,所以我在这里做错了什么,但我似乎无法得到这个工作。 任何人都可以指向正确的方向吗?

您想要在SetExtendModeX(D2D1_EXTEND_MODE mode)上使用SetExtendModeX(D2D1_EXTEND_MODE mode)和/或SetExtendModeY(D2D1_EXTEND_MODE mode) 。 默认情况下是D2D1_EXTEND_MODE.D2D1_EXTEND_MODE_CLAMP ,这会导致拉伸。 您需要D2D1_EXTEND_MODE.D2D1_EXTEND_MODE_WRAP

参考: http : //msdn.microsoft.com/en-us/library/windows/desktop/dd368100(v=vs.85).aspx