c++读取24位BMP图像并处理

来源:互联网 发布:淘宝怎么设置员工旺旺 编辑:程序博客网 时间:2024/06/05 15:27

代码

本代码在vs2017上测试运行,由于工具不同可能要有所修改。 关于bmp 4字节对齐

#include <iostream>#include <windows.h> using namespace std;typedef struct{    BYTE b;    BYTE g;    BYTE r;}RGB;RGB imgOpr(RGB a){    RGB b;    b.b = 255-a.b;    b.g = 255-a.g;    b.r = 255-a.r;    return b;}int main(){    BITMAPFILEHEADER fileHeader;    BITMAPINFOHEADER infoHeader;    FILE* pfin = fopen("D:/rotman.bmp", "rb");    FILE* pfout = fopen("D:/imgSave.bmp", "wb");    //Read the Bitmap file header;      fread(&fileHeader, sizeof(BITMAPFILEHEADER), 1, pfin);    //Read the Bitmap info header;      fread(&infoHeader, sizeof(BITMAPINFOHEADER), 1, pfin);    int height, weight;    height = infoHeader.biHeight;    weight = infoHeader.biWidth;    if (infoHeader.biBitCount == 24)    {        int size = height * weight;        RGB *img=new RGB[size];        fread(img, sizeof(RGB), size, pfin);        //对图片进行操作           int i;        for (i = 0; i<size; i++){                //对图片处理                  img[i] = imgOpr(img[i]);            }        //将修改后的图片保存到文件           fwrite(&fileHeader, sizeof(fileHeader), 1, pfout);        fwrite(&infoHeader, sizeof(infoHeader), 1, pfout);        fwrite(img, sizeof(RGB), size, pfout);    }else {        cout << "非24位彩色图" << endl;    }    fclose(pfin);    fclose(pfout);    return 0;}

结果

原图:看我头像



处理后图:
这里写图片描述

转化为灰度图

(实际上还是24位,没有颜色表,RGB占一个像元)处理代码:

RGB imgOpr(RGB a){    RGB b;    int i = (a.b + a.g + a.r) / 3;    b.b = i;    b.g = i;    b.r = i;    return b;}

这里写图片描述

阅读全文
0 0
原创粉丝点击