[英]Bitmap is stretching and not tiling
我正在嘗試使用位圖來拼貼這樣的東西:
---- ---- ----
| || || |
---- ---- ----
以下面的例子為例:
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(沿對角線方向),角落像素填充矩形。
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)
和/或SetExtendModeY(D2D1_EXTEND_MODE mode)
您CD2DBitmapBrush
。 默認值似乎是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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.