还是以24位BMP图像为例,图像的平移和镜像运算都较为简单,只需要注意几点:
1、BMP图像像素宽度必须被4整除,因此如果平移后的像素宽度也必须对齐
2、BMP图像是倒着存放的,在平移的时候要得想明白坐标系朝向
顺便说句,之前几篇blog里面的代码我都要求输入图像input.bmp的像素宽度必须能被4整除,然后我觉得这么偷懒也不是办法 = =。所以还是加了一些判定来解决这个问题。所以接下来的代码中都不要求输入图像的像素宽度是对齐的了。
另外在这个网站在线转换出来的bmp图片都能用下面的代码进行运算: http://pic.55.la
而用PS转换的bmp图片有时候会多出两个像素点导致我的程序无法识别 = =。目前还不知道是为什么
代码如下:
#include <cstdio>
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <cstdlib>
using namespace std;
#define TRANSLATION_X 200
#define TRANSLATION_Y 200
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned int DWORD;
//位图文件头定义;
typedef struct tagBITMAPFILEHEADER{
// WORD bfType;//单独读取,结构体中就不定义了
DWORD bfSize;//文件大小
WORD bfReserved1;//保留字
WORD bfReserv