我使用以下代码使用wxMemoryDC在Image上绘图。 为此,我使用了wxPen并更改了笔的设置,如下面的代码所示。代码在Windows环境中编译和运行完美。但是在Ubuntu中它绘制了线条,但是笔的大小在很短的时间内保持正确,然后笔的大小变得很小。(如图所示)这不是m_pensize变量的错误,因为它总是打印正确的值。为什么在ubuntu中它在Windows中正常工作时会如此奇怪?
(m_graphics是这里的memoryDC)
if (x<m_backgroundImage.GetWidth() && y< m_backgroundImage.GetHeight()){
m_graphics.SelectObject(m_maskImage);
wxPen* pen;
if (m_isDrawing){
pen = wxThePenList->FindOrCreatePen(*wxRED, m_penSize);
printf("Pen size is %d", m_penSize);
}
else{
pen = wxThePenList->FindOrCreatePen(*wxBLACK, m_penSize);
}
if (m_pentype != Circle){
pen->SetCap(wxCAP_PROJECTING);
}
m_graphics.SetPen(*pen);
m_graphics.DrawLine(m_lastX,m_lastY,x,y);
m_graphics.SelectObject(wxNullBitmap);
}
在Windows中,它显示正确
在linux中笔的大小无意中发生了变化。
非常感谢您的帮助。
答案 0 :(得分:1)
如果相同的代码在wxMSW和wxGTK中表现不同,那么它可能是wxWidgets本身的一个错误,但要解决它需要以一些简单的测试方式进行复制,理想情况是对wxWidgets进行尽可能小的更改{ {3}}和drawing sample将此更改作为补丁添加到其中。
为了尽可能简化代码,我建议:
wxThePenList
并直接创建笔。这个bug不太可能在这里,但是谁知道。SetCap()
来电,这是最有可能的候选人恕我直言。