C6748 图像处理算法调试 - TMS320C6748 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4141|回复: 2
打印 上一主题 下一主题

C6748 图像处理算法调试

[复制链接]

1

主题

2

帖子

27

积分

新手上路

Rank: 1

积分
27
跳转到指定楼层
楼主
发表于 2015-7-23 20:36:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
bmp ReadBmp(char *bmpName)
{
        bmp m;                        // 定义一个位图结构
        FILE *fp;
        unsigned char *BmpBuf;
        int i;
        int bmpWidth;        // 图像的宽
        int bmpHeight;        // 图像的高
        int biBitCount;        // 图像类型,每像素位数
        int lineByte;

        if((fp=fopen( bmpName, "rb"))==NULL)
        {
                printf( "can't open the bmp imgae.\n ");
                exit(0);
        }
        else
        {
                fread(&m.file.bfType, sizeof(char), 2, fp);                                // 类型
                fread(&m.file.bfSize, sizeof(int), 1, fp);                                    // 文件长度
                fread(&m.file.bfReserverd1, sizeof(short int), 1, fp);        // 保留字 1
                fread(&m.file.bfReserverd2, sizeof(short int), 1, fp);        // 保留字 2
                fread(&m.file.bfbfOffBits, sizeof(int), 1, fp);                        // 偏移量
                fread(&m.info.biSize, sizeof(int), 1, fp);                                    // 此结构大小
                fread(&m.info.biWidth, sizeof(int), 1, fp);                                // 位图的宽度
                fread(&m.info.biHeight, sizeof(int), 1, fp);                            // 位图的高度
                fread(&m.info.biPlanes, sizeof(short), 1, fp);                            // 目标设备位图数
                fread(&m.info.biBitcount, sizeof(short) ,1, fp);                    // 颜色深度
                fread(&m.info.biCompression, sizeof(int), 1, fp);                    // 位图压缩类型
                fread(&m.info.biSizeImage, sizeof(int), 1, fp);                        // 位图大小
                fread(&m.info.biXPelsPermeter, sizeof(int), 1, fp);                // 位图水平分辨率
                fread(&m.info.biYPelsPermeter, sizeof(int), 1, fp);                // 位图垂直分辨率
                fread(&m.info.biClrUsed, sizeof(int), 1, fp);                            // 位图实际使用颜色数
                fread(&m.info.biClrImportant, sizeof(int), 1, fp);                    // 位图显示中比较重要颜色数
        }

        // 获取图像宽、高、每像素所占位数等信息
        bmpWidth = m.info.biWidth;
        bmpHeight = m.info.biHeight;
        biBitCount = m.info.biBitcount;

        // 定义变量,计算图像每行像素所占的字节数(必须是4的倍数)
        lineByte = (bmpWidth*biBitCount/8+3)/4*4;

        // 灰度图像有颜色表,且颜色表表项为256
        if(biBitCount == 8)
        {
                // 分配内存空间
                m.pColorTable = (RGBQUAD *)malloc(256*4);
                // 申请颜色表所需要的空间,读颜色表进内存
                fread(m.pColorTable, sizeof(RGBQUAD), 256, fp);
        }

        // 分配内存空间
        m.imgBuf = (unsigned char *)malloc(m.info.biSizeImage);
        BmpBuf = (unsigned char *)malloc(m.info.biSizeImage);

        // 读位图数据
        fread(BmpBuf, lineByte * bmpHeight, 1, fp);

        // 将读到的数据垂直镜像翻转
        for(i = 0; i < bmpHeight; i++)
                memcpy((void *)(m.imgBuf + lineByte * i),
                                (void *)(BmpBuf + lineByte * (bmpHeight - i - 1)), lineByte);
        // 关闭文件
        fclose(fp);

        return m;
}
如果我想读取一个颜色深度为24的bmp图像(程序针对颜色深度为8),应该如何修改程序中的设置。。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
沙发
发表于 2015-7-24 15:01:34 | 只看该作者
建议先研究一下BMP格式,在做相应修改
回复 支持 反对

使用道具 举报

1

主题

2

帖子

27

积分

新手上路

Rank: 1

积分
27
板凳
 楼主| 发表于 2015-7-25 13:09:32 | 只看该作者
Lewis 发表于 2015-7-24 15:01
建议先研究一下BMP格式,在做相应修改

图像文件在一定的内存范围内,程序可以打开颜色深度24的bmp图像,但是图像要符合颜色深度8, 大小640*480像素才有较好的处理效果。bmp图像是从左向右,从下向上扫描,程序执行反色效果,这与图像大小的关系是什么,颜色深度也只是表示一个像素所占的字节大小
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-5-15 10:38 , Processed in 0.033778 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表