人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當前位置:蘿卜系統下載站 > 技術開發教程 > 詳細頁面

VC++6.0將數據文件圖像化

VC++6.0將數據文件圖像化

更新時間:2022-10-07 文章作者:未知 信息來源:網絡 閱讀次數:

中國科學院光電技術研究所 亓 波

  不同的圖像采集卡所存成的數據文件的格式是不同的,有的完全是數據的集合(如存成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);
}

  經過以上的變換便可以輕松顯示圖像了,注意圖像顯示 完后,要釋放已申請的指針。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

網站地圖xml | 網站地圖html
主站蜘蛛池模板: 荔波县| 勐海县| 金昌市| 汝南县| 垫江县| 江北区| 多伦县| 榆树市| 余姚市| 武邑县| 章丘市| 兴文县| 甘孜| 德保县| 神农架林区| 库尔勒市| 云和县| 晋州市| 江山市| 邢台县| 江油市| 龙泉市| 博客| 象州县| 哈密市| 宝鸡市| 清镇市| 井冈山市| 潮安县| 天峻县| 库伦旗| 宜兴市| 莎车县| 石台县| 伊金霍洛旗| 阿勒泰市| 启东市| 赤壁市| 吉安市| 三台县| 黎平县|