c++ - 在c++中绘制抗锯齿圆角矩形

标签 c++ linux opencv sdl antialiasing

正如标题中所写,我想在 C++ 和 Linux 上下文(ubuntu)中绘制抗锯齿圆角矩形。我已经尝试过 SDL_gfx 但抗锯齿功能在 roundedBox 形状上不可用。我还阅读了有关 SDL_Draw 的内容,但我认为它都不提供抗锯齿功能。

这就是为什么我问是否有人知道提供这种形状的框架,或者是否有人知道(轻)抗锯齿算法(我需要这个来进行实时视频处理)。

<小时/>

谢谢你,Vjo,但我真的不想在我的软件中使用 openGL ...顺便说一句,我想我找到了另一种绘制抗锯齿圆角矩形的方法!

我在第一篇文章中没有解释的是我已经在我的程序中使用了 SDL 和 opencv。所以我有一个想法:

  • 使用 SDL_gfx 绘制 1 channel 圆角矩形
  • 使用 cvSmooth 进行平滑以获得抗锯齿 alpha
  • 使用结果作为简单矩形的 Alpha channel

你对此有何看法?我今晚会尝试一下!

最佳答案

形状中唯一需要抗锯齿的部分是角。绘制四个抗锯齿的四分之一圆,每个角各一个(吴晓林的圆算法是这里的最佳选择),并用简单的线条弥合间隙。如果形状不会旋转(即所有直线都是垂直或水平的),请使用 Bresenham 的非抗锯齿直线算法,否则使用 Wu 的直线算法。Wu 的抗锯齿算法通常是最快的,并且会给出非常好的结果。

如果您确实想优化结果,并且熟悉 x86 汇编编程,我建议使用内联汇编语言编写绘图例程。经过适当调整,吴的直线算法只需 15 条指令即可编写,而他的圆形算法则约为 40-50 条指令。

关于c++ - 在c++中绘制抗锯齿圆角矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8054277/

相关文章:

c++ - C/C++ 优化器能否决定延迟评估仅用于短路评估的值?

linux - 在 Ubuntu : mounted host volume is not writable from container 上运行 docker

linux - 由于缺少 uuid 开发包导致 Asterisk 配置错误

c++ - 在标题中定义 cv::Mat 后跟另一个 Mat 避免了多个 channel

node.js - 将 OpenCV Mat 渲染到 Html5 Canvas 的最佳方法?

c++ - 在销毁对象之前锁定对象的互斥体将释放内存或其他一些意外的

c++ - 面向对象编程,使用静态函数统计对象

c++ - 如何在此代码 C++ 中返回字符串中的 md5 哈希值?

linux - 如何配置 lxc 2.0 配置文件以使用多个 overlayfs 下层?

c++ - OpenCV - C++ 中 Mat 对象的平均值