我想将图像旋转 90 度的倍数。我为此使用了一个简单的像素交换。
当我写这样的代码时:
for (int y = 0; y < image.Height(); y++) {
for (int x = 0; x < image.Width(); x++) {
image[x + y * image.Width()] = origin[ x * origin.Width() + origin.Width() - y + 1];
}
}
请告诉我我做错了什么?
为了镜像
(0 .. dimension-1)
范围内的坐标,您需要应用:
<mirrored_coord> = <dimension> - <org_coord> - 1
因此,如果您更改此行:
image[x + y * image.Width()] = origin[ x * origin.Width() + origin.Width() - y + 1];
成为:
// minus 1 instead of plus 1 ---------------------------------------------------vvv-
image[x + y * image.Width()] = origin[ x * origin.Width() + origin.Width() - y - 1];
它应该可以解决你的工件问题。
注意:
此解决方案假设持有
image
和 origin
的类具有 operator[]
,它返回对单个像素对象(可能是 3 通道对象)的引用。
还假设您的图像没有填充,即元素中的步幅等于宽度。