-
大小: 8.56MB文件类型: .zip金币: 1下载: 0 次发布日期: 2023-11-03
- 语言: C/C++
- 标签:
资源简介
C++代码实现24位无调色板BMP图像的平移、旋转、镜像、错切和缩放等操作。
在命令行用g++编译即可运行,具体请看目录下的README
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
using namespace std;
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned int DWORD;
//位图文件头定义;
typedef struct tagBITMAPFILEHEADER{
// WORD bfType;//单独读取,结构体中就不定义了
DWORD bfSize;//文件大小
WORD bfReserved1;//保留字
WORD bfReserved2;//保留字
DWORD bfOffBits;//从文件头到实际位图数据的偏移字节数
}BITMAPFILEHEADER;
typedef struct tagBITMAPINFOHEADER{
DWORD biSize;//信息头大小
DWORD biWidth;//图像宽度
DWORD biHeight;//图像高度
WORD biPlanes;//位平面数,必须为1
WORD biBitCount;//每像素位数
DWORD biCompression; //压缩类型
DWORD biSizeImage; //压缩图像大小字节数
DWORD biXPelsPerMeter; //水平分辨率
DWORD biYPelsPerMeter; //垂直分辨率
DWORD biClrUsed; //位图实际用到的色彩数
DWORD biClrImportant; //本位图中重要的色彩数
}BITMAPINFOHEADER; //位图信息头定义
//像素信息
typedef struct tagIMAGEDATA
{
BYTE blue;
BYTE green;
BYTE red;
}DATA;
BITMAPFILEHEADER strHead;
BITMAPINFOHEADER strInfo;
int hwsize;
int mWmSize;
int cxcy;
WORD bfType;
void translation(const DATA* src int x int y);
void rotation(const DATA* src double angle);
void scale(const DATA* src float x float y);
void shear(const DATA* src double angle char axis);
void mirror(const DATA* src char axis);
void printImage(const DATA* src string filename int size);
int main(){
FILE *fpi;
fpi=fopen(“input.bmp““rb“);
if(fpi != NULL){
//先读取文件类型
fread(&bfType1sizeof(WORD)fpi);
if(0x4d42!=bfType) {
cout<<“Error: The file is not a bmp image!“< return 0;
}
//读取bmp文件的文件头和信息头
fread(&strHead1sizeof(tagBITMAPFILEHEADER)fpi);
fread(&strInfo1sizeof(tagBITMAPINFOHEADER)fpi);
h=strInfo.biHeight;
w=strInfo.biWidth;
if(w % 4 == 0)
mW = w;
else
mW = (w/4+1)*4;
// if(h*mW*3!=strInfo.biSizeImage){
// cout<<“Error: image broken!“< // return 0;
// }
size=strInfo.biSizeImage/3;
// cout<<“h: “< // cout<<“w: “< // cout<<“size: “< // cout<<“h*w*3: “< // cout<<“bfsize: “<
DATA *imgdata=new DATA[size];
fread(imgdata1sizeof(DATA)*sizefpi); //读取bmp数据信息
fclose(fpi);
cx = mW / 2;
cy = h / 2;
int xy;
cout<<“Translation input the X(0 cin>>x;
cout<<“Translation input the Y(0 cin>>y;
translation(imgdata x y); //perform the translation
char axis;
cout<<“Mirror according to X axis or Y axis? (x or y): “;
cin>>axis;
mirror(imgdata axis);
float mulXmulY;
cout<<“Scale input the x coefficient (0.1 cin>>mulX;
cout<<“Scale input the y coefficient (0.1 cin>>mulY;
scale(imgdata mulX mulY);
double theta;
cout<<“Rotation input the angle to be rotate (0 < theta < 360): “;
cin>>theta;
theta = theta / 180 * 3.14159;
rotation(imgdata theta);
cout<<“Shear according to X axis or Y axis? (x or
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2015-12-13 15:33 image_process\
文件 6148 2015-12-13 15:30 image_process\.DS_Store
目录 0 2015-12-13 15:33 __MACOSX\
目录 0 2015-12-13 15:33 __MACOSX\image_process\
文件 120 2015-12-13 15:30 __MACOSX\image_process\._.DS_Store
文件 1920054 2015-12-02 20:59 image_process\input.bmp
文件 464 2015-12-02 20:59 __MACOSX\image_process\._input.bmp
文件 16479 2015-12-05 15:44 image_process\main.cpp
文件 1920054 2015-12-06 14:17 image_process\mirror.bmp
文件 177 2015-12-06 14:17 __MACOSX\image_process\._mirror.bmp
文件 454 2015-12-13 15:33 image_process\README.txt
文件 3861318 2015-12-06 14:17 image_process\rotation.bmp
文件 177 2015-12-06 14:17 __MACOSX\image_process\._rotation.bmp
文件 7680054 2015-12-06 14:17 image_process\scale.bmp
文件 177 2015-12-06 14:17 __MACOSX\image_process\._scale.bmp
文件 3033654 2015-12-06 14:17 image_process\shear.bmp
文件 177 2015-12-06 14:17 __MACOSX\image_process\._shear.bmp
文件 2700054 2015-12-06 14:17 image_process\translation.bmp
文件 177 2015-12-06 14:17 __MACOSX\image_process\._translation.bmp
- 上一篇:MFC程序100例.zip
- 下一篇:C++检测托盘图标和枚举进程2免费
评论
共有 条评论