写在前面:其实本不应该发在Java方面的,只是最近在做的项目因为实时应用的关系没有使用Java,因此借这里记录一下心得。
最近在一个在Linux下开放的项目中用到了wxWidgets,当时在GTK+、QT和wx之间选择了很久,最终确定选择wxWidgets。有关这个框架的详细信息,请自行google之。
1. 整合OpenGL
WxWidgets中整合OpenGL是十分简单的,因为wxWidgets本身对OpenGL进行了封装,因此只需要按照example中的例子进行编写即可。一种常见的方法是继承wxGLCanvas类,将EVT_PAINT的回调函数进行重载即可。一段示例代码如下:
2. 整合OpenCV
这个话题在网上有过讨论,在OpenCV中文论坛中提出了一种向HDC绘图的方法。不过这种方法的局限在于:HDC是Windows平台下特有的结构,在Linux下是不可行的。
其实OpenCV的核心是IplImage结构,基本上所有的OpenCV绘图语句以及相应的算法都可以通过这个结构衍生出来。因此,一种直接的想法是如何将IplImage转换为wxWidgets中的wxImage类型,这样就可以直接在wxWidgets绘制IplImage类型的数据了。于是在网上寻找后,在一个国外论坛中找到了现成的代码如下:
进行这样的转换后,我们就直接可以在wxWidgets中使用OpenCV的接口。
3. 整合MathPlot
MathPlot是sourceforge上的一个开源项目,其功能是使用wxWidgets提供的绘图方法构建操作DC绘图的高级接口。这个项目的源代码十分简单,只有两个文件,但是功能却很实用。我在sourceforge上给了好评。
MathPlot内部实现了坐标轴的拖拽、平移和缩放,将图形划分为Layer,并且引入了动态Layer的概念,即在这个Layer上绘制的图形可以通过重设局部坐标系的原点基准坐标实现移动,并绘制轨迹。而且,MathPlot内部实现了双缓冲,因此,这个框架对于需要实时显示轨迹的简单应用来说具有很好使用价值。
由于MathPlot直接使用了wxWidgets的绘图接口,因此其整合十分简单,只需要在需要绘制的Panel上使用MathPlot提供的接口即可实现整合。
以上简单说明了wxWidgets如何整合OpenGL、OpenCV和MathPlot三种不同的绘图框架,最后给一个将三种绘图方法用在同一个窗口中实现不同功能的实例:

转自:http://www.blogjava.net/feenn/archive/2011/01/16/343045.html