簡體   English   中英

位圖是拉伸而不是平鋪

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM