在wxWidgets中绘制类似绘画程序的绘图工具

时间:2011-05-07 15:19:51

标签: image-manipulation wxwidgets image-editor

我正在wxWidgets中创建一个程序,它具有与MS Paint类似的功能,但是出于更具体的目的。

我了解创建笔/铅笔对象的各种方法,当您拖动鼠标时,该对象会提交单个像素。我可视化的一件事是其他一些常见的工具:矩形,椭圆形,直线等。对于这些,你按下鼠标左键来设置原点,当你将鼠标拖动它时,暂时渲染一个画布上的形状从原点到当前鼠标位置的叠加,最后在释放鼠标按钮时将形状提交给图像。

创建此流程的最佳方法是什么?我能想到的唯一解决方案是将原点存储在鼠标按下,并且拖动鼠标以将临时变量设置为当前鼠标位置。每次鼠标位置发生变化时,您都会使矩形从原点无效到存储的鼠标位置。释放鼠标按钮后,形状将提交给图像模型。

我还没有实现这个,因为我想首先反馈。这是最佳解决方案,还是容易引起可见的闪烁,提供更优选的解决方案?

2 个答案:

答案 0 :(得分:2)

视频显示硬件现在非常快,您可能不需要为这些聪明而烦恼。

这是一种更简单的方法

- *Mouse moves with button down and tool X selected*
- IF flagToolInUse THEN remove previous from image model
- flagToolInUse = TRUE
- Update image model with tool X
- Draw image to invisible buffer
- Copy buffer to display
- Done

- *Button released*
- flagToolInUse = FALSE
- Done

这样做的真正好处是你可以编写一次代码,并且无论使用什么工具,都可以用于对图像的每次更改。

如果您需要有关使用wxWidgets实现无闪烁双缓冲显示的更多详细信息,请参阅introduction(主要是Windows)

答案 1 :(得分:1)

我建议在FloatCanvas中查看他们是如何做到这一点的。它适用于wxPython,但即使你使用的是“普通”的wxWidgets,也应该给你一些想法。