我使用以下代码通过 wxMemoryDC 在图像上绘制。 为此,我使用了 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 中笔的大小意外改变。
非常感谢您的帮助。
最佳答案
如果相同的代码在 wxMSW 和 wxGTK 中表现不同,那么它可能是 wxWidgets 本身的错误,但是要修复它需要以一些简单的测试方式重现,最好是对 wxWidgets drawing sample 进行尽可能小的更改和 opening a ticket 将此更改作为补丁附加到它。
为了尽可能简化代码,我建议:
- 摆脱
wxThePenList
并直接创建笔。错误不太可能在这里,但谁知道呢。 - 检查是否不是由于
SetCap()
调用,恕我直言,这是最有可能的候选者。
关于c++ - wxWidgets wxPen 大小意外改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30570807/