pub fn rasterize(&self, cfg: &image::Config, c: &Coord) -> (usize, usize) { let center = 127.5; let fcol = self.col as f64 + (self.col_offset as f64 / 255.0) - center; let frow = self.row as f64 + (self.row_offset as f64 / 255.0) - center; let xrot = center + cfg.rot_cos * fcol - cfg.rot_sin * frow; let yrot = center + cfg.rot_sin * fcol + cfg.rot_cos * frow; let icol = indexify(cfg.scale_x_fov, cfg.pixels_per_mm, xrot, c.x); let irow = indexify(cfg.scale_y_fov, cfg.pixels_per_mm, 255.0 - yrot, c.y); (icol, irow) }
时间: 2024-04-17 09:29:32 浏览: 118
ember-rasterize:将HTML或SVG光栅化为Ember中的图像。 对于在PDF中呈现HTML和SVG图表很有用
这段代码定义了一个名为 `rasterize` 的函数,用于将给定的坐标 `self` 根据配置参数 `cfg` 进行栅格化,并返回栅格化后的像素坐标。
函数内部进行了一系列的数值计算来进行栅格化。具体的计算步骤如下:
1. 创建一个 `center` 变量并赋值为 127.5,即图像的中心位置。
2. 将 `self.col` 转换为 `f64` 类型,并加上 `self.col_offset` 除以 255.0 的结果,再减去 `center`,得到 `fcol`。
3. 将 `self.row` 转换为 `f64` 类型,并加上 `self.row_offset` 除以 255.0 的结果,再减去 `center`,得到 `frow`。
4. 根据配置参数 `cfg` 中的旋转角度计算出经过旋转后的 x 坐标 `xrot` 和 y 坐标 `yrot`。
- 对于 x 坐标:将 `center` 加上 `cfg.rot_cos` 乘以 `fcol`,再减去 `cfg.rot_sin` 乘以 `frow`。
- 对于 y 坐标:将 `center` 加上 `cfg.rot_sin` 乘以 `fcol`,再加上 `cfg.rot_cos` 乘以 `frow`。
5. 使用 `indexify` 函数计算出经过缩放和偏移后的像素坐标 `icol` 和 `irow`。
- 对于 x 坐标:使用 `cfg.scale_x_fov`、`cfg.pixels_per_mm`、`xrot` 和 `c.x` 作为参数调用 `indexify` 函数。
- 对于 y 坐标:将 255.0 减去 `yrot`,并使用 `cfg.scale_y_fov`、`cfg.pixels_per_mm`、该值和 `c.y` 作为参数调用 `indexify` 函数。
6. 返回栅格化后的像素坐标 `(icol, irow)`。
这段代码根据给定的坐标和配置参数进行栅格化,并返回经过计算后的像素坐标。具体的计算逻辑可能与特定的图像处理需求相关。
阅读全文