青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 224  文章 - 41  trackbacks - 0
<2009年3月>
22232425262728
1234567
891011121314
15161718192021
22232425262728
2930311234

享受編程

常用鏈接

留言簿(11)

隨筆分類(159)

隨筆檔案(224)

文章分類(2)

文章檔案(4)

經(jīng)典c++博客

搜索

  •  

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

VC下顯示位圖的幾種方法
總結(jié)一下關(guān)于位圖的幾種用法。
說到這還是開頭給大家介紹一下,有關(guān)位圖的知識(shí)吧,以及對(duì)于我們比較有用的幾個(gè)關(guān)于位圖的結(jié)構(gòu)體。
一.位圖結(jié)構(gòu)如下:
 
---- 一、BMP文件結(jié)構(gòu) 
---- 1. BMP文件組成 
---- BMP文件由文件頭、位圖信息頭、顏色信息和圖形數(shù)據(jù)四部分組成。 
---- 2. BMP文件頭 
---- BMP文件頭數(shù)據(jù)結(jié)構(gòu)含有BMP文件的類型、文件大小和位圖起始位置等信息。 
---- 其結(jié)構(gòu)定義如下:  
typedef struct tagBITMAPFILEHEADER
{
WORDbfType;   // 位圖文件的類型,必須為BM
DWORD   bfSize;   // 位圖文件的大小,以字節(jié)為單位
WORDbfReserved1;  // 位圖文件保留字,必須為0
WORDbfReserved2;  // 位圖文件保留字,必須為0
DWORD   bfOffBits; // 位圖數(shù)據(jù)的起始位置,以相對(duì)于位圖
// 文件頭的偏移量表示,以字節(jié)為單位
} BITMAPFILEHEADER;
---- 3. 位圖信息頭  
BMP位圖信息頭數(shù)據(jù)用于說明位圖的尺寸等信息。
typedef struct tagBITMAPINFOHEADER{
   DWORD  biSize;   // 本結(jié)構(gòu)所占用字節(jié)數(shù)
   LONGbiWidth;  // 位圖的寬度,以像素為單位
   LONGbiHeight; // 位圖的高度,以像素為單位
   WORD   biPlanes; // 目標(biāo)設(shè)備的級(jí)別,必須為1
   WORD   biBitCount// 每個(gè)像素所需的位數(shù),必須是1(雙色),
  // 4(16色),8(256色)或24(真彩色)之一
   DWORD  biCompression;   // 位圖壓縮類型,必須是 0(不壓縮),
  // 1(BI_RLE8壓縮類型)或2(BI_RLE4壓縮類型)之一
   DWORD  biSizeImage; // 位圖的大小,以字節(jié)為單位
   LONGbiXPelsPerMeter; // 位圖水平分辨率,每米像素?cái)?shù)
   LONGbiYPelsPerMeter;  // 位圖垂直分辨率,每米像素?cái)?shù)
   DWORD  biClrUsed;// 位圖實(shí)際使用的顏色表中的顏色數(shù)
   DWORD  biClrImportant;// 位圖顯示過程中重要的顏色數(shù)
} BITMAPINFOHEADER; 
---- 4. 顏色表  
    顏色表用于說明位圖中的顏色,它有若干個(gè)表項(xiàng),每一個(gè)表項(xiàng)是一個(gè)RGBQUAD類型的結(jié)構(gòu),定義一種顏色。RGBQUAD結(jié)構(gòu)的定義如下: 
typedef struct tagRGBQUAD {
BYTErgbBlue;// 藍(lán)色的亮度(值范圍為0-255)
BYTErgbGreen;   // 綠色的亮度(值范圍為0-255)
BYTErgbRed; // 紅色的亮度(值范圍為0-255)
BYTErgbReserved;// 保留,必須為0
} RGBQUAD;
顏色表中RGBQUAD結(jié)構(gòu)數(shù)據(jù)的個(gè)數(shù)有biBitCount來確定:
當(dāng)biBitCount=1,4,8時(shí),分別有2,16,256個(gè)表項(xiàng);
當(dāng)biBitCount=24時(shí),沒有顏色表項(xiàng)。
   位圖信息頭和顏色表組成位圖信息,BITMAPINFO結(jié)構(gòu)定義如下:
typedef struct tagBITMAPINFO {
   BITMAPINFOHEADER bmiHeader;   // 位圖信息頭
   RGBQUAD  bmiColors[1];  // 顏色表
} BITMAPINFO;
下面我們介紹第一種辦法:
//第一種方法,使用WM__CTRLCOLOR來實(shí)現(xiàn)
/*******************OnCtlColor中添加的代碼*****************/
HBRUSH CDemoBitmapDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
 HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
 
 // TODO: Change any attributes of the DC here
 //第一種實(shí)現(xiàn)方法
 if(nCtlColor=CTLCOLOR_DLG)
 {
  return brush;
 }
 // TODO: Return a different brush if the default is not desired
 return hbr;
}
BOOL CDemoBitmapDlg::OnInitDialog()
{
 //第一種方法,使用wm_ctlcolor來實(shí)現(xiàn)
 CBitmap bitmap;
 bitmap.LoadBitmap(IDB_BITMAP1);
 brush.CreatePatternBrush(&bitmap);//brush定義在頭文件中CBrush burush
 bitmap.DeleteObject();
}
第二種方法使用資源文件中導(dǎo)入的IDB_BITMAP來實(shí)現(xiàn)
第一步先在資源中導(dǎo)入一個(gè)位圖:IDB_BITMAP1
void CDemoBitmapDlg::OnBtnBitmap() 
{
 // TODO: Add your control notification handler code here
 /***************顯示BITMAP的第二種方法**********************/
 HBITMAP hBitmap;
 CBitmap bitmap;
 CClientDC *pDC;
 pDC=new CClientDC(this);
 hBitmap=(HBITMAP)::LoadImage(::AfxGetInstanceHandle(),"NetFriend.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
 bitmap.Attach(hBitmap);
 CDC CDCompatible;
 CDCompatible.CreateCompatibleDC(pDC);//創(chuàng)建兼容DC
 CDCompatible.SelectObject(&bitmap);
 /*********其它幾種顯示方式********/
/* pDC->BitBlt(0,0,200,200,&CDCompatible,0,0,SRCCOPY);
 CDCompatible.SetBkMode(TRANSPARENT);
 pDC->StretchBlt(0,0,352,288,&CDCompatible,0,0,352,288,SRCCOPY);
    CDCompatible.CreateCompatibleDC(this->GetDC());
    CDCompatible.SelectObject(&bitmap); */ //選擇繪圖對(duì)象
 BITMAP bmp;
 bitmap.GetBitmap(&bmp);
    pDC->StretchBlt(0,0,bmp.bmWidth,bmp.bmHeight,&CDCompatible,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY); 
    CDCompatible.DeleteDC();  
    ::DeleteObject(&bitmap); 
}
第三種方法是通過讀取指定目錄中的位圖文件來顯示(這里分別把它們顯示在Picture控件和Static上面這也是大家通常要用到的):
void CDemoBitmapDlg::OnBtnPic() 
{
 // TODO: Add your control notification handler code here
 /****************向PICTURE控件中動(dòng)態(tài)添加位圖****************************/
 HBITMAP hBitmap;
 CBitmap bitmap;
 hBitmap=(HBITMAP)::LoadImage(::AfxGetInstanceHandle(),"NetFriend.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
 bitmap.Attach(hBitmap);
 m_Pic.SetBitmap(hBitmap);
}
/****************在STATIC中顯示位圖*********************/
void CDemoBitmapDlg::OnBtnStatic() 
{
 // TODO: Add your control notification handler code here
 CBitmap hbmp;
 HBITMAP hbitmap;
 //將pStatic指向要顯示的地方
 CStatic *pStaic;
 pStaic=(CStatic*)GetDlgItem(IDC_IMAGE);
// pStaic=(CStatic*)GetDlgItem(IDC_BUTTON1);
 //裝載資源 MM.bmp是我的一個(gè)文件名,用你的替換
 hbitmap=(HBITMAP)::LoadImage (::AfxGetInstanceHandle(),"NetFriend.bmp",
  IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION); 
 
 hbmp.Attach(hbitmap);
 //獲取圖片格式
 BITMAP bm;
 hbmp.GetBitmap(&bm);
 CDC dcMem;
 dcMem.CreateCompatibleDC(GetDC());
 CBitmap *poldBitmap=(CBitmap*)dcMem.SelectObject(hbmp);
 CRect lRect;
 pStaic->GetClientRect(&lRect);
 //顯示位圖
 pStaic->GetDC()->StretchBlt(lRect.left ,lRect.top ,lRect.Width(),lRect.Height(),  &dcMem,0 ,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
 dcMem.SelectObject(&poldBitmap);
}
/*****************向BUTTON中添加ICON*****************************/
//方法和導(dǎo)入其它位圖類似,在這里就只做一個(gè)說明一下就是了。 
HICON hIco;
 hIco=AfxGetApp()->LoadIcon(IDI_ICON1);
 m_BtnBitmap.SetIcon(hIco);
第四種讀取位圖文件來顯示位圖:
void CDemoBitmapDlg::OnBtnBtmfile() 
{
 // TODO: Add your control notification handler code here
 /*******************通過讀取位圖文件來顯示位圖**********************/
 CString strFileName;
 strFileName.Format("%s","NetFriend.bmp");
 //成位圖信息BITMAPINFO
 BITMAPINFO *bitmapinfo=NULL;
 BYTE *BmpData=NULL;
 CFile file;//讀取位圖信息
 //設(shè)置文件的打開方式
 if(!file.Open(strFileName,Cfile::modeRead|Cfile::typeBinary))
 {
  return;
 }
 //BITMAP文件頭結(jié)構(gòu)體
 BITMAPFILEHEADER BitmapHead;
 //讀取位圖文件頭
 if(file.Read(&BitmapHead,sizeof(BITMAPFILEHEADER))!=sizeof(BITMAPFILEHEADER))
 {
  MessageBox("讀取文件頭失敗!");
  return;
 }
 if(BitmapHead.bfType!=0x4d42)
 {
  MessageBox("對(duì)不起,您讀取的不是位圖文件!");
  return;
 }
 //位圖信息
 BITMAPINFOHEADER  BitmapInfo;
 if(file.Read(&BitmapInfo,sizeof(BITMAPINFOHEADER))!=sizeof(BITMAPINFOHEADER))
 {
  MessageBox("讀取位圖信息失敗!");
  return;
 }
 if(BitmapInfo.biBitCount!=24)
 {
  MessageBox("對(duì)不起,當(dāng)前程序只支持24位位圖信息!");
  return;
 }
 bitmapinfo=(BITMAPINFO*)new char[sizeof(BITMAPINFOHEADER)];
 if(!bitmapinfo)
 {
  MessageBox("內(nèi)存分配失敗!");
  return;
 }
 /*把BMP位圖信息頭中的數(shù)據(jù)讀取到位圖信息結(jié)構(gòu)中去.*/
 memcpy(bitmapinfo,&BitmapInfo,sizeof(BITMAPINFOHEADER));
 /*用來得到位圖文件的大小*/
 DWORD dataByte=BitmapHead.bfSize-BitmapHead.bfOffBits;
 BmpData=(BYTE*)new char[dataByte];
 if(!BmpData)
 {
  MessageBox("內(nèi)存分配失敗!");
  delete bitmapinfo;
  delete BmpData;
  return;
 }
 if(file.Read(BmpData,dataByte)!=dataByte)
 {
  MessageBox("讀取位圖數(shù)據(jù)失敗!");
  return;
 }
 file.Close();
 CClientDC *pDC=new CClientDC(this);
 pDC->SetStretchBltMode(COLORONCOLOR);
 StretchDIBits(pDC->GetSafeHdc(),200,0,BitmapInfo.biWidth,BitmapInfo.biHeight,  0,0,BitmapInfo.biWidth,BitmapInfo.biHeight,BmpData,bitmapinfo,DIB_RGB_COLORS,SRCCOPY);
}
最后給大家介紹兩個(gè)顯示位圖的特效的例子更多的特效顯示
1> 水平交錯(cuò)顯示位圖
void CListBmap::OnButton1() 
{
 // TODO: Add your control notification handler code here
 HBITMAP hBitmap;
 CBitmap cBitmap;
 hBitmap=(HBITMAP)::LoadImage(::AfxGetInstanceHandle(),"NetFriend.bmp",  IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
 cBitmap.Attach(hBitmap);
 cBitmap.GetBitmap(&bitmap);
 int i=0,j=0;
 CClientDC *pDC=new CClientDC(this);
 CDC memDC;
 memDC.CreateCompatibleDC(GetDC());
 memDC.SelectObject(&cBitmap);
 for(i=0;i<bitmap.bmHeight;i+=2)
 {
  j=i;
  while(j>0)
  {
   pDC->StretchBlt(0,j-1,bitmap.bmWidth,1,&memDC,0,bitmap.bmHeight-(i-j+1),    bitmap.bmWidth,1,SRCCOPY);
   pDC->StretchBlt(0,bitmap.bmHeight-j,bitmap.bmWidth,1,&memDC,0,i-j,    bitmap.bmWidth,1,SRCCOPY);
   j-=2;
  }
  Sleep(50);
 }
}
2>雨點(diǎn)顯示:
void CListBmap::OnButton2() 
{
 // TODO: Add your control notification handler code here
 HBITMAP hBitmap;
 CBitmap cBitmap;
 hBitmap=(HBITMAP)::LoadImage(::AfxGetInstanceHandle(),"NetFriend.bmp",  IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
 cBitmap.Attach(hBitmap);
 cBitmap.GetBitmap(&bitmap);
 int i=0,j=0;
 CClientDC *pDC=new CClientDC(this);
 CDC memDC;
 memDC.CreateCompatibleDC(GetDC());
 memDC.SelectObject(&cBitmap);
 for ( i=0; i<=bitmap.bmHeight; i++ )   
 {
  for ( j=0; j<=bitmap.bmHeight-i; j++ )  
   pDC->StretchBlt(  
   0,j,  
   //目標(biāo)設(shè)備邏輯橫、縱坐標(biāo)  
   bitmap.bmWidth,1,  
   //顯示位圖的像素寬、高度 
   &memDC,  
   //源位圖設(shè)備情境對(duì)象 
   0,bitmap.bmHeight-i,  
   //源位圖的起始橫、縱坐標(biāo)  
   bitmap.bmWidth,1,  
   //源位圖的像素寬、高度  
   SRCCOPY);  
  Sleep(20);  
 }
}
posted on 2010-01-24 15:36 漂漂 閱讀(1377) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 深入vc++
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久综合福利| 欧美.www| 亚洲综合电影一区二区三区| 亚洲激情国产精品| 欧美在线免费播放| 欧美一区二区三区在线看 | 欧美一区二区三区视频在线观看 | 亚洲第一精品在线| 亚洲激情一区| 亚洲男女自偷自拍图片另类| 午夜精品久久一牛影视| 久久成人18免费观看| 欧美成人激情在线| 欧美视频手机在线| 国产日韩欧美一区二区| 亚洲婷婷在线| 久久黄色小说| 欧美日韩亚洲一区二区三区在线 | 亚洲成人直播| 91久久夜色精品国产九色| 一本不卡影院| 久久久久国产精品麻豆ai换脸| 欧美国产欧美综合| 亚洲欧美日韩天堂| 欧美激情亚洲精品| 国产一区二区三区在线免费观看| 亚洲精品欧美精品| 久久久久久夜精品精品免费| 亚洲全部视频| 久久精品首页| 国产精品久久久久久超碰| 亚洲国产成人不卡| 欧美一区二区三区四区在线 | 国产欧美日韩三级| 一区二区三区日韩| 欧美成人精品在线视频| 亚洲欧美日韩一区在线观看| 欧美激情亚洲自拍| 在线播放一区| 欧美亚洲视频在线观看| 亚洲日本中文字幕免费在线不卡| 欧美主播一区二区三区美女 久久精品人| 欧美精品97| 在线高清一区| 久久精品国产精品亚洲| 尤物在线精品| 国产日韩欧美综合| 亚洲一区二区三区777| 欧美成人精品在线视频| 欧美中文字幕视频| 国产小视频国产精品| 午夜精品久久久久久久99黑人| 亚洲黄页一区| 欧美国产激情二区三区| 亚洲国产美女精品久久久久∴| 久久久久久999| 午夜精品久久久久久久蜜桃app| 葵司免费一区二区三区四区五区| 中国成人亚色综合网站| 欧美日韩系列| 亚洲天堂网在线观看| 亚洲乱码国产乱码精品精98午夜 | 国产精品久久看| 在线一区二区三区做爰视频网站| 欧美成人精品不卡视频在线观看 | 亚洲香蕉成视频在线观看| 亚洲欧洲在线免费| 欧美日韩 国产精品| 日韩系列欧美系列| 日韩视频免费观看| 国产精品成人一区| 欧美一级久久久| 欧美专区第一页| 亚洲二区视频| 亚洲欧洲免费视频| 国产精品jizz在线观看美国| 亚洲欧美在线播放| 久久av一区二区三区| ●精品国产综合乱码久久久久| 欧美成人午夜激情视频| 欧美久久婷婷综合色| 亚洲欧美在线磁力| 久久精品在线免费观看| 亚洲国产日韩欧美在线99| 亚洲欧洲一区二区天堂久久| 国产精品久久99| 久久深夜福利免费观看| 欧美国产三区| 欧美在线观看视频一区二区三区| 久久久久久久波多野高潮日日| 亚洲国产日韩欧美在线动漫| 中文网丁香综合网| 伊人天天综合| 亚洲视频第一页| 一区二区三区我不卡| 99在线精品免费视频九九视| 国产亚洲一区二区三区| 欧美黄色aaaa| 国产精品永久免费在线| 亚洲国产日韩欧美在线图片| 国产精品久久久久aaaa九色| 欧美高清在线视频| 国产情人节一区| 欧美在线一二三区| 亚洲嫩草精品久久| 欧美三级网址| 亚洲午夜国产一区99re久久 | 亚洲午夜国产一区99re久久| 久久久视频精品| 亚洲日本理论电影| 女仆av观看一区| 午夜精品久久久久久久99樱桃| 久久久综合网站| 久久另类ts人妖一区二区 | 亚洲桃花岛网站| 久久综合网色—综合色88| 亚洲永久免费av| 欧美激情视频一区二区三区在线播放| 欧美在线精品免播放器视频| 欧美日韩精品在线视频| 欧美激情亚洲自拍| 好看不卡的中文字幕| 亚洲免费在线播放| 亚洲小视频在线观看| 欧美sm视频| 蜜臀久久久99精品久久久久久| 国产精品手机视频| 亚洲视频在线播放| 亚洲伊人色欲综合网| 欧美日韩国产综合视频在线观看中文| 久久性天堂网| 国产精品日韩一区二区| 一区二区福利| 亚洲永久在线观看| 欧美色精品天天在线观看视频| 亚洲激情一区二区| 亚洲理论在线观看| 免播放器亚洲一区| 欧美国产亚洲精品久久久8v| 在线观看亚洲精品视频| 亚洲欧美日韩一区在线观看| 欧美专区日韩专区| 韩国av一区二区| 久久久精品国产一区二区三区| 久久久最新网址| 亚洲国产精品va在看黑人| 免费成人av| 最新日韩欧美| 亚洲欧美精品中文字幕在线| 国产精品福利在线观看网址| 亚洲专区一区二区三区| 久久久激情视频| 亚洲国产成人tv| 欧美日韩91| 亚洲欧美成人网| 可以免费看不卡的av网站| 亚洲高清自拍| 国产精品v欧美精品v日韩| 亚洲欧美成人一区二区在线电影| 久久久夜夜夜| 亚洲先锋成人| 国产精品午夜春色av| 欧美大片一区二区| 国产精品国产a级| 亚洲国产精品一区在线观看不卡| 午夜精品久久久久久久久| 亚洲欧美一区二区原创| 午夜影院日韩| 韩国精品一区二区三区| 奶水喷射视频一区| 亚洲乱码视频| 国产精品自拍一区| 亚洲第一级黄色片| 99日韩精品| 影音先锋久久资源网| 国产一区二区黄| 久久国产手机看片| 亚洲国产一区在线| 欧美视频日韩| 欧美在线视频二区| 亚洲人午夜精品| 久久精品亚洲| 亚洲激情黄色| 蜜桃av久久久亚洲精品| 亚洲色图制服丝袜| 午夜影院日韩| 亚洲毛片一区| 国产一区二区黄色| 欧美精品系列| 久久嫩草精品久久久精品一| 中文网丁香综合网| 亚洲国产一成人久久精品| 亚洲素人一区二区| 亚洲精品在线二区| 尤物yw午夜国产精品视频明星| 国产精品久久久一区二区三区| 模特精品在线| 欧美1区2区3区| 久久久99国产精品免费| 亚洲小说区图片区|