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

代码

本代码在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;
}

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值