c++图像处理:24位真彩图颜色变换实例

2025-05-27 0 24

c++图像处理:24位真彩图颜色变换实例

实例如下:

?

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位真彩图颜色变换实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持快网idc。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 c++图像处理:24位真彩图颜色变换实例 https://www.kuaiidc.com/74852.html

相关文章

发表评论
暂无评论