在c++中绘制一个抗混叠的圆角矩形
Draw an anti aliased rounded rectangle in c++
如标题所述,我想在c++和linux环境(ubuntu)中绘制抗锯齿圆角矩形。我已经尝试了SDL_gfx,但抗锯齿在roundedBox形状上不可用。我也读过SDL_Draw,但我认为它既不提供抗混叠。
这就是为什么我问是否有人知道提供这种形状的框架,或者是否有人知道(光)反混叠算法(我需要这个实时视频处理)。
谢谢你Vjo,但我真的不想在我的软件中使用openGL…顺便说一下,我想我想出了另一种方法来绘制抗混叠圆角矩形!
我在第一篇文章中没有解释的是,我已经在我的程序中使用SDL和opencv。于是我有了一个主意:
- 用SDL_gfx 绘制1通道的圆角矩形
- 使用cvSmooth平滑它以获得抗混叠alpha
- 使用结果作为一个简单矩形的alpha通道
你觉得怎么样?我今晚就试试!
形状中唯一需要反锯齿化的部分是角。画四个反锯齿的四分之一圆,每个角一个(吴晓琳的圆算法是你最好的选择),用简单的线条弥合缝隙。如果形状不会被旋转(即所有直线不是垂直就是水平),则使用Bresenham的非抗锯齿直线算法,否则使用Wu的直线算法。Wu的抗混叠算法通常是最快的,并且给出了非常好的结果。
如果你真的想优化你的结果,并且熟悉x86汇编编程,我建议使用内联汇编语言编写绘图例程。经过适当调整,wu的行算法只需15条指令,而他的圆算法大约需要40-50条指令。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 运行同一解决方案的另一个项目的项目
- 挂起和取消挂起一个文件DLL
- 用C++中的一个变量定义一个常量
- 函数向量_指针有不同的原型,我可以构建一个吗
- 在c++中用vector填充一个简单的动态数组
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 预处理器:插入结构名称中的前一个行号
- 我在c++代码中生成了一个运行时#3异常
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 从链接列表c++中删除一个项目
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '