m0_64740991 2022-05-30 16:06 采纳率: 0%
浏览 53
已结题

用linux对任意bmp图片像素信息读取与显示

img

希望可以给出如图步骤的详细解决信息,感谢!!网上找了相关内容,但是自己基础太差,根本无从下手。

  • 写回答

4条回答

  • 关注
    获得2.50元问题酬金

    关于BMP图片的问题,你是问对人了。
    直接上代码:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    #pragma pack(1) //强制1个字节对齐
    //BMP的文件头
    struct _BMP_HEAD
    {
        char type[2]; //图片的类型 "BM"
        unsigned int size; //文件大小
        unsigned short  r1; //保留1
        unsigned short  r2; //保留2
        unsigned int seek; //数据偏移字节(真实像素点数据)
    };
    
    //BMP的参数信息
    struct _BMP_INFO
    {
        unsigned int size; //当前结构体大小
        unsigned int w; //宽度
        unsigned int h; //高度
        unsigned short flag; //固定为1
        unsigned short bit; //像素点的位数
        unsigned int r1; //压缩方式  0
        unsigned int r2; //水平分辨率
        unsigned int r3; //垂直分辨率
        unsigned int r4; //垂直分辨率
        unsigned int r5; //引用色彩
        unsigned int r6; //关键色彩
    };
    
    int main(int argc,char **argv)
    {
        if(argc!=2)
        {
            printf("传入的参数格式: ./a.out <文件名称>\n");
            return 0;
        }
        
        /*1. 打开BMP图片*/
        FILE *fp=fopen(argv[1],"rb");
        if(fp==NULL)
        {
            printf("%s 文件不存在.\n",argv[1]);
            return 0;
        }
        /*2. 读取BMP的文件头*/
        int cnt;
        struct _BMP_HEAD bmp_head;
        cnt=fread(&bmp_head,1,sizeof(struct _BMP_HEAD),fp);
        printf("成功读取:%d 字节.\n",cnt);
        printf("图片类型:%c%c\n",bmp_head.type[0],bmp_head.type[1]);
        printf("文件大小:%d\n",bmp_head.size);
        printf("数据距离文件头的偏移量:%d\n",bmp_head.seek);
        /*3. 读取文件参数信息*/
        struct _BMP_INFO bmp_info;
        cnt=fread(&bmp_info,1,sizeof(struct _BMP_INFO),fp);
        printf("成功读取:%d 字节.\n",cnt);
        printf("当前结构体大小:%d\n",bmp_info.size);
        printf("当前图片宽度:%d\n",bmp_info.w);
        printf("当前图片高度:%d\n",bmp_info.h);
        printf("当前图片颜色位数:%d\n",bmp_info.bit);
        printf("当前图片的压缩情况:%d\n",bmp_info.r1);
        /*4. 关闭文件*/
        fclose(fp);
        return 0;
    }
    

    如果你要了解BMP,那么接下来的文章就对你很有帮助。针对BMP图片的创建,翻转、加水印、剪切、缩放,应有尽有。C语言环境下直接copy代码过去即可运行。
    RGB源数据操作: 在图片上添加中文水印 https://blog.csdn.net/xiaolong1126626497/article/details/107943342
    RGB源数据操作: 实现图片放大、缩小 https://blog.csdn.net/xiaolong1126626497/article/details/107944138
    C语言编程: 在BMP图片上添加图片水印 https://blog.csdn.net/xiaolong1126626497/article/details/107957423

    评论

报告相同问题?

问题事件

  • 系统已结题 6月7日
  • 创建了问题 5月30日