将bmp图像旋转90度

问题描述 投票:0回答:1

我想将图像旋转 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];
    }
 }

图像翻转,出现奇怪的伪影: enter image description here

原图是这样的:enter image description here

请告诉我我做错了什么?

c++ arrays algorithm image multidimensional-array
1个回答
0
投票

为了镜像

(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 通道对象)的引用。 还假设您的图像没有填充,即元素中的步幅等于宽度。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.