智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 3756|回复: 9
打印 上一主题 下一主题

二值化数组变BMP图像

[复制链接]

5

主题

52

帖子

0

精华

高级会员

Rank: 4

积分
879
威望
439
贡献
198
兑换币
23
注册时间
2012-8-4
在线时间
121 小时
毕业学校
理工学院
跳转到指定楼层
1#
发表于 2012-9-23 14:55:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 周杰伦 于 2012-9-23 14:56 编辑

本人最近在用VC++6.0做上位机。希望能够做一个在线的而非SD卡的图像显示。
那么最大的问题就是将采到的二值化的点变BMP图像的问题。
照着MSDN自己写了一个二值化数组->BMP文件的代码。本意是0打黑的像素,1打败的像素。但是调色板那里不知道怎么弄。。。。现在上代码,上文件。希望大家一起研究。对研究上位机有用的。
也请论坛大牛瞅瞅,不妨提出点意见呢。
上两份文件给大家瞅瞅BMP结构,希望大家一起研究。





//必要头文件
#include   <stdio.h>   
#include   <stdlib.h>   
#include   <string.h>
#include   <math.h>
#include   <iostream.h>
#include   <windows.h>


void main()
{
        FILE   *fp;  
        int   width=20,height=13,i;        
        BITMAPFILEHEADER fileheader;
        BITMAPINFOHEADER infoheader;
        
        RGBQUAD index[2];   //调色基础
        char* name="002.bmp";
        fp=fopen(name, "wb");
    unsigned char*data=new unsigned char[width*height];   //这个指针用于存放图像
        unsigned char datatemp[260]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
                                                                1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,
                                                                1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,
                                                                1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,
                                                                1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,
                                                                1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,
                                                                1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,
                                                                1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,
                                                                1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,
                                                                1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,
                                                                1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,
                                                                1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,
                                                                1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
                                                                };
        for(i=0;i<260;i++)
        {
                data=datatemp;

        }




        //写文件头
    fileheader.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*2;
//        fileheader.bfReserved1=0;
//        fileheader.bfReserved2=0
        fileheader.bfType=0x4d42;
        //fileheader.bfSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*256+sizeof(char)*width*height;


        //写信息头
        infoheader.biBitCount=1;         //写图像的位数 1表示2^1种颜色
         //infoheader.biClrImportant=0;
        infoheader.biClrUsed=2;       // 位图实际使用的颜色表中的颜色数
        infoheader.biCompression=0;          // 位图压缩类型 0 表示无压缩
        infoheader.biHeight=height;   //图像的长度
        infoheader.biWidth=width;          //图像的宽度
        infoheader.biSize=sizeof(BITMAPINFOHEADER);  //创建需要的文件大小
        
        //infoheader.biSizeImage=width*height*sizeof(char);
        //infoheader.biPlanes=1;                   // 目标设备的级别,必须为1
        //infoheader.biXPelsPerMeter=10;  // 位图水平分辨率,每米像素数
        //infoheader.biYPelsPerMeter=10;  // 位图垂直分辨率,每米像素数        
        
    fwrite(&fileheader,sizeof(BITMAPFILEHEADER),1,fp);    //写文件头         
        fwrite(&infoheader,sizeof(BITMAPINFOHEADER),1,fp);          //写信息头
               
        
/*        for(i=0;i<2;i++)                                                                        
        {
                index.rgbBlue=i;

                 index.rgbGreen=i;

                index.rgbRed=i;

                 index.rgbReserved=0;

        }*/
        index[0].rgbBlue=255;
         index[0].rgbGreen=255;
        index[0].rgbRed=255;
         index[0].rgbReserved=0;
        index[1].rgbBlue=0;
         index[1].rgbGreen=0;
        index[1].rgbRed=0;
         index[1].rgbReserved=0;
        fwrite(index,sizeof(RGBQUAD),2,fp);
//        for(i=0;i<height*width;i++)        
//                data=rand()%2;

        fwrite(data,1,width*height,fp);           //写入数据 但它是一个一维数据//串口发上来的数据有必要进行转化的
        fclose(fp);
        delete [] data;                                                          //清空内存


}


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

5

主题

52

帖子

0

精华

高级会员

Rank: 4

积分
879
威望
439
贡献
198
兑换币
23
注册时间
2012-8-4
在线时间
121 小时
毕业学校
理工学院
2#
 楼主| 发表于 2012-9-23 14:59:02 | 只看该作者
一遍继续研究,一边慢慢盖楼!!
回复 支持 反对

使用道具 举报

38

主题

1651

帖子

0

精华

功勋会员

Rank: 10Rank: 10Rank: 10

积分
8770
威望
4444
贡献
2638
兑换币
1818
注册时间
2010-12-29
在线时间
844 小时
3#
发表于 2012-9-23 16:21:58 | 只看该作者
你直接存真彩也可以,那就不用调色板了。
回复 支持 反对

使用道具 举报

5

主题

52

帖子

0

精华

高级会员

Rank: 4

积分
879
威望
439
贡献
198
兑换币
23
注册时间
2012-8-4
在线时间
121 小时
毕业学校
理工学院
4#
 楼主| 发表于 2012-9-23 16:29:53 | 只看该作者
yukunlinykl 发表于 2012-9-23 16:21
你直接存真彩也可以,那就不用调色板了。

那岂不是图像会很大么。。如果智能车沿着赛道跑一圈,岂不是几百MB下去了

回复 支持 反对

使用道具 举报

38

主题

1651

帖子

0

精华

功勋会员

Rank: 10Rank: 10Rank: 10

积分
8770
威望
4444
贡献
2638
兑换币
1818
注册时间
2010-12-29
在线时间
844 小时
5#
发表于 2012-9-23 17:12:59 | 只看该作者
周杰伦 发表于 2012-9-23 16:29
那岂不是图像会很大么。。如果智能车沿着赛道跑一圈,岂不是几百MB下去了

100*100像素足矣。
而且大了本身也传不出来。
回复 支持 反对

使用道具 举报

5

主题

496

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2570

优秀会员奖章活跃会员奖章

QQ
威望
1267
贡献
743
兑换币
1
注册时间
2010-3-7
在线时间
280 小时
6#
发表于 2012-9-23 23:43:32 | 只看该作者
不错,不错。
回复 支持 反对

使用道具 举报

5

主题

52

帖子

0

精华

高级会员

Rank: 4

积分
879
威望
439
贡献
198
兑换币
23
注册时间
2012-8-4
在线时间
121 小时
毕业学校
理工学院
7#
 楼主| 发表于 2012-9-24 09:16:32 | 只看该作者
ccw163165 发表于 2012-9-23 23:43
不错,不错。

这是谁??貌似很熟悉嘛
回复 支持 反对

使用道具 举报

22

主题

246

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4997
QQ
威望
2596
贡献
1389
兑换币
860
注册时间
2011-12-17
在线时间
506 小时
8#
发表于 2012-9-26 13:16:23 | 只看该作者
顶楼主~
回复 支持 反对

使用道具 举报

0

主题

33

帖子

0

精华

高级会员

Rank: 4

积分
746
威望
425
贡献
193
兑换币
52
注册时间
2012-3-1
在线时间
64 小时
9#
发表于 2012-9-29 18:15:30 | 只看该作者
什意思
回复 支持 反对

使用道具 举报

6

主题

49

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1816
威望
917
贡献
555
兑换币
546
注册时间
2016-3-4
在线时间
172 小时
10#
发表于 2016-3-24 22:57:07 | 只看该作者
还好吧
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-10-2 06:27 , Processed in 0.126149 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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