给图像进行指定区域颜色变换

​​#include <my_head.h>

typedef struct Color{
    unsigned char b;
    unsigned char g;
    unsigned char r;
    unsigned char a;//透明度 0 全透明 255 不透明
}color_t;

int main(int argc, const char *argv[]){
    if(2 != argc){
        printf("Usage : %s filename\n", argv[0]);
        return -1;
    }
    FILE *fp = NULL;
    if(NULL == (fp = fopen(argv[1], "r+")))
        ERR_LOG("fopen error");

    char bfType[2] = {0};
    fread(bfType, 1, 2, fp);
    printf("bfType = %s\n", bfType);//BM

    int bfSize = 0;
    fread(&bfSize, 1, 4, fp);
    printf("bfSize = %d\n", bfSize);//大小

    int offset = 0;
    fseek(fp, 4, SEEK_CUR);
    fread(&offset, 1, 4, fp);
    printf("offset = %d\n", offset);//偏移量

    int biWidth = 0;
    fseek(fp, 4, SEEK_CUR);
    fread(&biWidth, 1, 4, fp);
    printf("biWidth = %d\n", biWidth);//宽度

    int biHeight = 0;
    fread(&biHeight, 1, 4, fp);
    printf("biHeight = %d\n", biHeight);//高度

    short bitCount = 0;
    fseek(fp, 2, SEEK_CUR);
    fread(&bitCount, 1, 2, fp);
    printf("bitCount = %d\n", bitCount);//位深度

    //想操作图片内容 需要把光标定位到第一个像素点的位置
    fseek(fp, offset, SEEK_SET);
    //将光标定位到鼻子左上角的像素点
    fseek(fp, bitCount/8 * (325*biWidth+595), SEEK_CUR);
    color_t c = {0, 255, 0, 255};
    int i = 0;
    int j = 0;
    //外层循环控制行数
    for(i = 0; i < 419-325; i++){
        //填充一行颜色
        for(j = 0; j < 691-595; j++){
            fwrite(&c, 1, 4, fp);
        }
        //定位光标到下一行
        fseek(fp, bitCount/8 * (biWidth-(691-595)), SEEK_CUR);
    }
    fclose(fp);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值