分享
 
 
 

VC++6.0将数据文件图像化

王朝厨房·作者佚名  2007-01-04
窄屏简体版  字體: |||超大  

中国科学院光电技术研究所 亓波

不同的图像采集卡所存成的数据文件的格式是不同的,有的完全是数据的集合(如存成DAT 文件),而有的还要在数据前面加一个文件头。下面就以DAT文件为例说明如何再现图像。至于带文件头的数据文件,只要参考图像采集卡的说明书,把单纯的数据从文件中读出来,问题也就迎刃而解了。

1.将数据文件中的数据读到一指针中。

设采集图像的大小为width*height 像素,用8阶灰度表示。

#include “iostream.h"

#include “fstream.h"

double *filetobuf=new UINT[width*height];

fstream infile;

infile.open(filename,ios::in|ios::binary);

for(int i=0;i< width*height;i++)

{

infile.read((char *) (filetobuf+i),sizeof(UINT));

}

这样就把文件中的数据读到了filetobuf指针中。

2.利用Windows的API函数 StretchDIBits()显示图像。

StretchDIBits函数将设备无关位图从原矩形拷贝到目的矩形,如果拷贝位图与目的矩形大小不适应,则相应地对位图进行扩展或者缩小操作。如果函数调用成功,则返回已经拷贝的扫描行数目,否则,函数返回值为GDI_ERRPR。函数原形如下:

int StrechDIBits(HDC hdc,int Xdest, int Ydest,int

nDestWidth,int nDestHeight,int XSrc,int Ysrc, < brnSrcWidth,int nSrcWidth,

CONST VOID * lpBits,CONST BITMAPINFO

pBitsinfo,UINT iUsage,DWORD dwRop)

其中,参数hdc 指定目的设备上下文句柄;参数Xdest 与Ydest分别以逻辑单位指定目的矩形左上角的X、 Y坐标;参数XSrc与YSrc则分别以像素点为单位,指定DIB位图中源矩形原点的X、Y 坐标;参数nDestWidth、nDestHeight分别以逻辑单位指定目的矩形的宽度与高度; nSrcWidth、nSrcHeight分别以逻辑单位指定源矩形的宽度与高度;参数lpBits指向作为字节数组进行存储的DIB位图位;lpBitsinfo指向BITMAPINFO结构;iUsage指定 BITMAPINFO结构中是否存在bmiColor成员;如果存在该成员,则其中提供颜色的显示RGB 值还是索引值;dwRop指定需要执行的光栅操作,它指定如何组合目标设备的当前画刷、

源位图以及目的位图,从而产生新的图像。

因此在使用StrechDIBits前要进行BITMAPINFOHEADER 对象的定义。

BITMAPINFOHEADER bmiHeader;

bmiHeader.biSize =sizeof(BITMAPINFOHEADER);

bmiHeader.biWidth = width;

bmiHeader.biHeight = height;

bmiHeader.biPlanes = 1;

bmiHeader.biBitCount = 24;

bmiHeader.biCompression = BI_RGB;

bmiHeader.biSizeImage = 0;

bmiHeader.biXPelsPerMeter = 0;

bmiHeader.biYPelsPerMeter = 0;

bmiHeader.biClrUsed = 0;

bmiHeader.biClrImportant = 0;

int lines = StretchDIBits(theDC->m_hDC,

0,0,

bmiHeader.biWidth,

hmiHeader.biHeight,

0,0,

bmiHeader.biWidth,

bmiHeader.biHeight,

buf,

(LPBITMAPINFO)&bmiHeader,

DIB_RGB_COLORS,

SRCCOPY);

buf 应为指向真彩色图像数据部分的指针,因此必须对 filetobuf加以转化,把filetobuf对应的每个像素的值分别付给buf的R、G、B部分。

buf=new UINT[width*height*3];

for(int i=0;i<width*height;i++)

{

*(buf+i*3)=*(filetobuf+i);

*(buf+i*3+1)=*(filetobuf+i);

*(buf+i*3+2)=*(filetobuf+i);

}

经过以上的变换便可以轻松显示图像了,注意图像显示 完后,要释放已申请的指针。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有