我正在尝试使用wxWidgets创建一个大型位图,绘制到该位图,然后覆盖到小于位图的GUI。下面的代码有效,但如果位图大小是宽度和宽度的3倍或更多,则会崩溃。 GUI空间的高度..这可以达到大约4000x2000 px但我需要它大于那个。奇怪的是,我尝试基本上裁剪较大的位图,然后绘制较小的裁剪版本..但它仍然崩溃。有什么想法吗?
它崩溃在mdc-> DrawBitmap(bmp,0,0,true);
我收到一条错误消息:断言"断言失败"在wxBitmap :: GetRawData()中失败:wxBitmap :: GetRawData()中的位图类型不正确
int bwidth = vp->pix_width * 3;
int bheight = vp->pix_height * 3;
wxBitmap tbmp(bwidth,bheight);
tbmp.UseAlpha();
wxMemoryDC memDC (tbmp);
wxGCDC dc(memDC);
//dc.SetBackground(*wxTRANSPARENT_BRUSH);
dc.SetBackground(*wxWHITE_BRUSH);
dc.Clear();
dc.SetPen(wxPen(colour, 10));
// if (chartScale < 1000000){
GetCanvasPixLL(vp, &p2, maxlat, minlon);
GetCanvasPixLL(vp, &boat, m_pfix.Lat, m_pfix.Lon);
b1.x = boat.x + 50;
b1.y = boat.y + 20;
b2.x = boat.x - 50;
b2.y = boat.y + 20;
dc.DrawLine(b1, b2);
memDC.SelectObject(wxNullBitmap);
wxRect subSize(0, 0, (vp->pix_width)/1.5, (vp->pix_height)/1.5);
const wxBitmap bmp = tbmp.GetSubBitmap(subSize);
mdc->DrawBitmap(bmp, 0,0,true);
更新
这是固定的......我注意到我没有明确设置位深度。当创建低于特定大小的位图时,它似乎产生32位深度图像。大于一定大小,位深度降至24.这是发生崩溃的时候。
我通过以下方式明确将位深度设置为32位:
wxBitmap tbmp(bwidth,bheight, 32);
并且没有任何崩溃。我不知道为什么这会导致坠机事故。如果有人能够启发我,那将不胜感激!