Растровое изображение растягивается, а не мозаично - PullRequest
3 голосов
/ 07 ноября 2011

Я пытаюсь получить растровое изображение для разбивки на что-то вроде этого:

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

, делая в качестве примера следующее:

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);
}

Конечно, я делаю что-то не так, так как я новичок, но я не могу заставить это работать.Кто-нибудь может указать мне правильное направление?

1 Ответ

2 голосов
/ 07 ноября 2011

Вы хотите использовать 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

...