gpt4 book ai didi

c - 如何在C中反转数组

转载 作者:行者123 更新时间:2023-11-30 19:26:15 29 4
gpt4 key购买 nike

我正在尝试为一个旧设备制作一个软件驱动程序,并且我成功地为其添加了位图支持。问题是所有位图都是垂直翻转的,我需要以某种方式翻转它们。

我的数组有 230400 个元素(对于分辨率 320x240,320*3 颜色,每个 y 像素有 960 个元素,因此总共 230400 个元素)

我尝试了 Reversing arrays in C 中的这个昨天但今天我意识到我需要将每 960 个元素从开始到结束切换到(我认为)将其垂直翻转。

我还在互联网上尝试了一种数组反向指南,但它反转了所有元素,因此颜色发生了变化,并且在成功垂直翻转后又水平翻转

为了导入 320x240 位图,我使用了 https://stackoverflow.com/a/9296467,将数据重命名为BMPdata并将我的代码段添加到B,G,R到R,G,B代码

data[(i+y*320)] = BMPdata[i];
data[(i+y*320)+1] = BMPdata[i+1];
data[(i+y*320)+2] = BMPdata[i+2];

这段代码将红色(第一行)、绿色(第二行)、蓝色(第三行)的每个像素设置为 BMPdata 数组中所需的值。

所以我希望它垂直翻转,因为之前使用的那个不起作用,而第二个将整个数组从 0-230400 反转到 230400-0 也改变了颜色(这对我来说是合乎逻辑的),但也翻转了图像水平方向,所以我也不能使用它。

我希望它让每 960 个元素从开始到结束进行切换,而不改变其中的任何内容,例如:我有 5760 个元素的数组

960-1920: Test of the second line.
1920-2880: Third test
2880-3840: 4th line of text
3840-4800: Nearly the last thing.
4800-5760: Last line.

我希望它会像这样翻转:

0-960: Last line.
960-1920: Nearly the last thing.
1920-2880: 4th line of text
2880-3840: Third test
3840-4800: Test of the second line.
4800-5760: This is a test of the first line.

但看起来它像这样通过反向数组翻转:

0-960: .enil tsaL
960-1920: .gniht tsal eht ylraeN
1920-2880: txet fo enil ht4
2880-3840: tset drihT
3840-4800: .enil dnoces eht fo tseT
4800-5760: .enil tsrif eht fo tset a si sihT

最佳答案

有多种选择。仅举其中两个为例:

  • 使用二维字节数组代替一维字节数组,其中“外部”维度为 Y,“内部”维度为 (X * 颜色)。使用 memcpy() 复制整个像素行而不更改其中的字节顺序。

  • 定义像素和行的结构,并将位图定义为一维行数组。您可以通过简单的赋值来复制 struct 值(一行),该赋值将在后台编译为 memcpy()

初学者的方法也可以是使用两个嵌套循环,一个用于 Y,一个用于 (X * 颜色)。 Y 循环将翻转位图,而 X 循环将保持序列。

我会选择struct,因为它更具可读性并且实现了您的意思。而且您不想处理字节,您想处理像素和行。

关于c - 如何在C中反转数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57744888/

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