怎么在表面画一条线?

问题描述

我知道有一个函数可以填充矩形 surface.FillRect(&Rect,uint32),但是有没有办法在表面绘制一条线,就像渲染器 renderer.DrawLine(x1,y1,x2,y2)函数一样?

解决方法

在 SDL2 中,Surface 只是一种表示驱动程序不可知格式的位图(2D 像素矩阵)的结构。在绘图方面,Surface API 仅限于设置像素或容易定义的像素组(矩形)或将一个表面的矩形块化(复制)到另一个表面。使用该 API,您在技术上可以通过计算坐标 x1,y1 和 x2,y2 之间该线上每个像素的坐标并将每个像素设置为所需颜色来绘制一条线。 SDL2 库本身没有这样的实用函数。

Renderer 是更高级的 API,负责处理加速渲染的许多基础方面。除了单个像素和矩形之外,它还提供线基元。它使用 Texture 代替 Surface,它以优化的格式为底层图形驱动程序存储像素(从而在绘图时提供更高的性能)。如果你正在做一些新的工作,你应该坚持使用 Renderer。如果您需要将基于 Surface 的代码插入到 Renderer 代码中,您可以使用 Renderer.CreateTextureFromSurface() 方法从 Surface 数据创建 Texture。