gpt4 book ai didi

c++ - 位图正在拉伸(stretch)而不是平铺

转载 作者:可可西里 更新时间:2023-11-01 09:31:09 25 4
gpt4 key购买 nike

我正在尝试获取一个位图来平铺这样的东西:

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

以下面的例子为例:

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

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

如果我更改 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);
}

当然,我在这里做错了什么,因为我是新手,但我似乎无法让它发挥作用。谁能指出我正确的方向?

最佳答案

您想在 CD2DBitmapBrush 上使用 SetExtendModeX(D2D1_EXTEND_MODE mode) 和/或 SetExtendModeY(D2D1_EXTEND_MODE mode)。默认值似乎是 D2D1_EXTEND_MODE.D2D1_EXTEND_MODE_CLAMP,这会导致拉伸(stretch)。您需要 D2D1_EXTEND_MODE.D2D1_EXTEND_MODE_WRAP

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

关于c++ - 位图正在拉伸(stretch)而不是平铺,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8040074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com