gpt4 book ai didi

c - 在c中水平翻转图像

转载 作者:太空宇宙 更新时间:2023-11-04 03:33:04 25 4
gpt4 key购买 nike

我的功能是获取图像,我正在尝试显示它的镜像。水平翻转。我尝试执行类似交换功能的操作,但它会打印原始图片。

图像的大小是m*n,函数知道m和n的值。

这是我的代码:

void flipfunc(Img *img)
{
int y;
int x;
const int middleX = m / 2;
char tmp;
char* p;

for (x = 0; x < middleX; ++x)
{
p = image->data + x * m;
for (y = 0; y <3*n; y+=3)
{
// swap pixels
tmp = p[y];
p[y] = p[3*n - 1 - y];
p[3*n - 1 - y] = tmp;
tmp = p[y+1];
p[y+1] = p[3*n - 1 - (y+1)];
p[3*n - 1 - y] = tmp;
tmp = p[y+2];
p[y+2] = p[3*n - 1 - (y+2)];
p[3*n - 1 - (y+2)] = tmp;
}
}
}

/* 图像类型——包含高度、宽度和RGB数据*/

struct Img {
unsigned long X;
unsigned long Y;
char *data;
};

最佳答案

抛开其他人在评论中提到的问题,我会尝试用一些提示来回答:

1) 在您的函数中,您想对给定的 rgb 图像进行就地镜像。这是合理的。

2) 您的“middleX”和像素交换方法的思考方向是正确的。但看起来你做错了:你完全忽略了图像的上半部分,而是将下半部分的每一行交换两次!这就是为什么您最终会得到相同图像的原因。那么为什么不将“中间”逻辑应用到内部循环而不是外部循环呢?

关于c - 在c中水平翻转图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34665394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com