使用Xlib启用抗锯齿

4
我正在尝试开发一个用于在Linux中创建GUI的自定义库,包括小部件、按钮等。因此,我现在正在学习使用X11及其Xlib创建用户界面。我已经成功创建了指定大小、位置和背景颜色的窗口,并可以绘制点、矩形和弧线。但是,当我绘制第一个圆时,我非常失望,因为圆形没有抗锯齿,我可以看到每个像素都是一个正方形。
现在问题很简单,有没有办法告诉X:在绘制之前,请抗锯齿任何东西?还是我必须避免使用XDrawArc,并使用自定义函数,为圆的每个点调用XDrawPoint?或者还有第三种解决方案吗?
提前感谢您的帮助。
3个回答

6

简短的回答是“不行”。Xlib不支持反锯齿。

更长的回答是“你可以使用更高级的API,如Cairo Graphics”。没有必要自己编写。


Cairo图形库可以进行客户端的光栅化和上传操作。如果您想继续使用X11,通常的方法是使用XRender。 - datenwolf
@datenwolf:据我了解,当可用时,Cairo可以使用XRender。 - n. m.
是的,如果使用正确的选项编译,我可以这样做。然而我有印象,原帖作者想尽可能接近X11。 - datenwolf

4
你遇到的是X11核心协议的限制;从技术上讲,完全可以向其中添加抗锯齿功能,但并没有发生。
相反,有XRender扩展提供漂亮的抗锯齿原语。你还需要查看Xft,使用矢量字体渲染抗锯齿文本。

0

你可以自己编写抗锯齿算法。你只需要两个基本元素:1)一个绘制TrueColor点的函数(即,如果你使用XCB,则是xcb_poly_point()),以及2)for循环。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接