实例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
#include<iostream> #include<Windows.h> using namespace std; bool isred( BYTE r, BYTE g,byte b){ if (r>g&&r>b) return true ; else return false ; } void red2green( BYTE & r, BYTE & g, BYTE & b){ BYTE tmp=r; r=g; g=tmp; } int main(){ FILE *fpin= fopen ( "flo.bmp" , "rb+" ); if (fpin==NULL){ cout<< "目录里没有输入图" <<endl; system ( "pause" ); return 0; } BITMAPFILEHEADER bitmapfileheader; BITMAPINFOHEADER bitmapinfoheader; fread (&bitmapfileheader, sizeof (bitmapfileheader),1,fpin); fread (&bitmapinfoheader, sizeof (bitmapinfoheader),1,fpin); if (bitmapfileheader.bfType!= 'B' + 'M' *256){ cout<< "不是bmp格式" <<endl; fclose (fpin); system ( "pause" ); return 0; } if (bitmapinfoheader.biBitCount!=24){ cout<< "不是24位bmp" <<endl; fclose (fpin); system ( "pause" ); return 0; } //设置fpout FILE *fpout= fopen ( "output.bmp" , "wb+" ); //BITMAPFILEHEADER bitmapfileheader2; //BITMAPINFOHEADER bitmapinfoheader2; //bitmapfileheader2=bitmapfileheader; //bitmapinfoheader2=bitmapinfoheader; fwrite (&bitmapfileheader, sizeof (bitmapfileheader),1,fpout); fwrite (&bitmapinfoheader, sizeof (bitmapinfoheader),1,fpout); if (bitmapinfoheader.biClrUsed!=0){ cout<< "是索引图" <<endl; system ( "pause" ); return 0; } if (bitmapinfoheader.biBitCount==24){ cout<< "24位真彩图" <<endl; //int line_width=((bitmapinfoheader.biWidth*bitmapinfoheader.biBitCount+24)/32)*4; int line_width=bitmapinfoheader.biWidth*3; BYTE *line_buf= new BYTE [line_width]; for ( int i=0;i<bitmapinfoheader.biHeight;i++){ fread (line_buf,line_width,1,fpin); for ( int j=0;j<bitmapinfoheader.biWidth;j++){ BYTE b=line_buf[3*j]; BYTE g=line_buf[3*j+1]; BYTE r=line_buf[3*j+2]; if (isred(r,g,b)){ red2green(line_buf[3*j+2],line_buf[3*j+1],line_buf[3*j]); } } fwrite (line_buf,line_width,1,fpout); } fclose (fpin); fclose (fpout); delete []line_buf; cout<< "红变绿完成" <<endl; } system ( "pause" ); return 0; } |
以上这篇c++图像处理:24位真彩图颜色变换实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。