【发布时间】:2020-01-04 18:42:17
【问题描述】:
我正在尝试为一台旧设备制作软件驱动程序,并成功为其添加了位图支持。问题是所有位图都是垂直翻转的,我需要以某种方式翻转它们。
我的数组有 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
【问题讨论】:
-
为什么要翻转它们?例如,BMP 文件让原点位于左上角或左下角。读取数据时只需要知道顺序即可。