[wxWidgets]_[中级]_[合并图片-平铺图片-使用小图绘制大图]


场景:

1.有时候绘制控件的背景时,控件的大小是不定的,即可以最大化最小化,这样使用固定大小的图片就不合适了。

2.解决办法之一就是使用平铺小图片的方式合并成大的背景图.


方法1:使用图形的Brush..
static void DrawWordBitmap(wxBitmap* dest, wxBitmap* source)
{
	wxMemoryDC dc;
	dc.SelectObject(*dest);
	dc.SetPen(*(wxTRANSPARENT_PEN));
	dc.SetBrush(wxBrush(*source));
	dc.DrawRectangle(0, 0, dest->GetWidth(),dest->GetHeight());
	dc.SelectObject(wxNullBitmap);
}


方法2:使用Blit
int s_width = source->GetWidth();

	int d_height = dest->GetHeight();
	int d_width = dest->GetWidth();

	wxMemoryDC sdc;
	wxMemoryDC ddc;
	sdc.SelectObject(*source);
	ddc.SelectObject(*dest);

	if (s_width >= d_width)
	{
		ddc.Blit(0, 0, d_width, d_height, &sdc, 0, 0, wxCOPY, true);
	}
	else
	{
		for (int i = 0; i < d_width;)
		{
			s_width = ((d_width - i) > s_width) ? s_width : (d_width - i);
			ddc.Blit(i, 0, s_width, d_height, &sdc, 0, 0, wxCOPY, true);
			i += s_width;
		}
	}
	sdc.SelectObject(wxNullBitmap);
	ddc.SelectObject(wxNullBitmap);


你可能感兴趣的:(C++,wxwidgets,blit,wxBrush)