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

The Fourth Dimension Space

枯葉北風寒,忽然年以殘,念往昔,語默心酸。二十光陰無一物,韶光賤,寐難安; 不畏形影單,道途阻且慢,哪曲折,如渡飛湍。斬浪劈波酬壯志,同把酒,共言歡! -如夢令

VC下顯示位圖的幾種方法(轉)

總結一下關于位圖的幾種用法。
說到這還是開頭給大家介紹一下,有關位圖的知識吧,以及對于我們比較有用的幾個關于位圖的結構體。
一.位圖結構如下:
 

---- 一、BMP文件結構
---- 1. BMP文件組成
---- BMP文件由文件頭、位圖信息頭、顏色信息和圖形數據四部分組成。
---- 2. BMP文件頭
---- BMP文件頭數據結構含有BMP文件的類型、文件大小和位圖起始位置等信息。
---- 其結構定義如下: 
typedef struct tagBITMAPFILEHEADER
{
WORDbfType;   // 位圖文件的類型,必須為BM
DWORD   bfSize;   // 位圖文件的大小,以字節為單位
WORDbfReserved1;  // 位圖文件保留字,必須為0
WORDbfReserved2;  // 位圖文件保留字,必須為0
DWORD   bfOffBits; // 位圖數據的起始位置,以相對于位圖
// 文件頭的偏移量表示,以字節為單位
} BITMAPFILEHEADER;
---- 3. 位圖信息頭 
BMP位圖信息頭數據用于說明位圖的尺寸等信息。
typedef struct tagBITMAPINFOHEADER{
   DWORD  biSize;   // 本結構所占用字節數
   LONGbiWidth;  // 位圖的寬度,以像素為單位
   LONGbiHeight; // 位圖的高度,以像素為單位
   WORD   biPlanes; // 目標設備的級別,必須為1
   WORD   biBitCount// 每個像素所需的位數,必須是1(雙色),
  // 4(16色),8(256色)或24(真彩色)之一
   DWORD  biCompression;   // 位圖壓縮類型,必須是 0(不壓縮),
  // 1(BI_RLE8壓縮類型)或2(BI_RLE4壓縮類型)之一
   DWORD  biSizeImage; // 位圖的大小,以字節為單位
   LONGbiXPelsPerMeter; // 位圖水平分辨率,每米像素數
   LONGbiYPelsPerMeter;  // 位圖垂直分辨率,每米像素數
   DWORD  biClrUsed;// 位圖實際使用的顏色表中的顏色數
   DWORD  biClrImportant;// 位圖顯示過程中重要的顏色數
} BITMAPINFOHEADER;
---- 4. 顏色表 
    顏色表用于說明位圖中的顏色,它有若干個表項,每一個表項是一個RGBQUAD類型的結構,定義一種顏色。RGBQUAD結構的定義如下:
typedef struct tagRGBQUAD {

BYTErgbBlue;// 藍色的亮度(值范圍為0-255)
BYTErgbGreen;   // 綠色的亮度(值范圍為0-255)
BYTErgbRed; // 紅色的亮度(值范圍為0-255)
BYTErgbReserved;// 保留,必須為0
} RGBQUAD;
顏色表中RGBQUAD結構數據的個數有biBitCount來確定:
當biBitCount=1,4,8時,分別有2,16,256個表項;
當biBitCount=24時,沒有顏色表項。
   位圖信息頭和顏色表組成位圖信息,BITMAPINFO結構定義如下:
typedef struct tagBITMAPINFO {
   BITMAPINFOHEADER bmiHeader;   // 位圖信息頭
   RGBQUAD  bmiColors[1];  // 顏色表
} BITMAPINFO;
下面我們介紹第一種辦法:
//第一種方法,使用WM__CTRLCOLOR來實現
/*******************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
 //第一種實現方法
 if(nCtlColor=CTLCOLOR_DLG)
 {
  return brush;
 }
 // TODO: Return a different brush if the default is not desired
 return hbr;
}

BOOL CDemoBitmapDlg::OnInitDialog()
{
 //第一種方法,使用wm_ctlcolor來實現
 CBitmap bitmap;
 bitmap.LoadBitmap(IDB_BITMAP1);
 brush.CreatePatternBrush(&bitmap);//brush定義在頭文件中CBrush burush
 bitmap.deleteobject();
}
第二種方法使用資源文件中導入的IDB_BITMAP來實現
第一步先在資源中導入一個位圖: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);//創建兼容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); */ //選擇繪圖對象
 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控件中動態添加位圖****************************/
 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是我的一個文件名,用你的替換
 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*****************************/
//方法和導入其它位圖類似,在這里就只做一個說明一下就是了。
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;//讀取位圖信息
 //設置文件的打開方式
 if(!file.Open(strFileName,Cfile::modeRead|Cfile::typeBinary))
 {
  return;
 }
 //BITMAP文件頭結構體
 BITMAPFILEHEADER BitmapHead;
 //讀取位圖文件頭
 if(file.Read(&BitmapHead,sizeof(BITMAPFILEHEADER))!=sizeof(BITMAPFILEHEADER))
 {
  MessageBox("讀取文件頭失敗!");
  return;
 }
 if(BitmapHead.bfType!=0x4d42)
 {
  MessageBox("對不起,您讀取的不是位圖文件!");
  return;
 }
 //位圖信息
 BITMAPINFOHEADER  BitmapInfo;
 if(file.Read(&BitmapInfo,sizeof(BITMAPINFOHEADER))!=sizeof(BITMAPINFOHEADER))
 {
  MessageBox("讀取位圖信息失敗!");
  return;
 }
 if(BitmapInfo.biBitCount!=24)
 {
  MessageBox("對不起,當前程序只支持24位位圖信息!");
  return;
 }
 bitmapinfo=(BITMAPINFO*)new char[sizeof(BITMAPINFOHEADER)];
 if(!bitmapinfo)
 {
  MessageBox("內存分配失敗!");
  return;
 }
 /*把BMP位圖信息頭中的數據讀取到位圖信息結構中去.*/
 memcpy(bitmapinfo,&BitmapInfo,sizeof(BITMAPINFOHEADER));
 /*用來得到位圖文件的大小*/
 DWORD dataByte=BitmapHead.bfSize-BitmapHead.bfOffBits;
 BmpData=(BYTE*)new char[dataByte];
 if(!BmpData)
 {
  MessageBox("內存分配失敗!");
  delete bitmapinfo;
  delete BmpData;
  return;
 }
 if(file.Read(BmpData,dataByte)!=dataByte)
 {
  MessageBox("讀取位圖數據失敗!");
  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);
}
最后給大家介紹兩個顯示位圖的特效的例子更多的特效顯示(http://www.pconline.com.cn/pcedu/empolder/gj/vc/0504/608259.html):
1> 水平交錯顯示位圖
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>雨點顯示:
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, 
   //目標設備邏輯橫、縱坐標 
   bitmap.bmWidth,1, 
   //顯示位圖的像素寬、高度
   &memDC, 
   //源位圖設備情境對象
   0,bitmap.bmHeight-i, 
   //源位圖的起始橫、縱坐標 
   bitmap.bmWidth,1, 
   //源位圖的像素寬、高度 
   SRCCOPY); 
  Sleep(20); 
 }
}

轉自:http://blog.csdn.net/xyshu/archive/2008/08/20/2802162.aspx

posted on 2009-06-14 14:37 abilitytao 閱讀(570) 評論(0)  編輯 收藏 引用

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产欧美精品一区二区色综合 | 久久久久久亚洲精品杨幂换脸| 亚洲一区二区三区中文字幕| 亚洲欧美综合另类中字| 嫩草国产精品入口| 久久久免费精品视频| 久久蜜桃精品| 蜜桃av综合| 欧美激情在线观看| 欧美日韩国产区| 国产精品久久久一本精品| 国产精品激情偷乱一区二区∴| 欧美四级在线观看| 国产精品白丝av嫩草影院| 国产精品一区二区a| 国产午夜精品理论片a级大结局| 国产精品一区二区你懂得| 国产一区二区黄色| 亚洲国产精品va| 一本久道久久综合中文字幕| 久久久一二三| 欧美黄色免费网站| 国产精品久久久久999| 国产精品入口福利| 狠狠色伊人亚洲综合网站色| 亚洲黄色成人久久久| 亚洲免费视频在线观看| 久久国产精品一区二区三区四区| 久久中文字幕一区二区三区| 亚洲国产午夜| 亚洲欧洲精品一区| 午夜久久久久久| 欧美福利视频在线| 国产午夜一区二区三区| 亚洲色图在线视频| 蜜臀99久久精品久久久久久软件| 亚洲精品久久久一区二区三区| 午夜视频一区二区| 欧美日韩日本网| 激情婷婷亚洲| 午夜精品久久久久久久久久久久久| 久久在线视频| 欧美欧美全黄| 国产精品婷婷午夜在线观看| 可以看av的网站久久看| 欧美国产一区视频在线观看| 国产欧美日韩视频在线观看| 在线一区二区三区四区五区| 亚洲一区二区三区精品在线| 久久中文久久字幕| 国产精品私房写真福利视频| 亚洲国产毛片完整版 | 日韩视频三区| 99国产精品国产精品久久| 亚洲小说欧美另类社区| 亚洲一区二区三区高清不卡| 久久国产加勒比精品无码| 午夜精品久久久久久久白皮肤| 亚洲专区一区二区三区| 黑人一区二区三区四区五区| 久久精品国产精品亚洲| 欧美激情一区二区三区在线视频 | 精品二区视频| 久久久久综合网| 欧美亚洲三区| 国产亚洲第一区| 性欧美xxxx大乳国产app| 中文日韩电影网站| 国产欧美午夜| 亚洲资源在线观看| 亚洲欧美成人一区二区在线电影 | 樱花yy私人影院亚洲| 亚洲经典自拍| 在线观看亚洲视频| 午夜国产精品影院在线观看 | 欧美波霸影院| 久久青草福利网站| 久久久久一本一区二区青青蜜月| 亚洲欧美精品中文字幕在线| 国产欧美日韩另类视频免费观看| 欧美在线视频一区| 久久久999国产| 99亚洲一区二区| 亚洲视频一区在线| 国产区日韩欧美| 久久久人成影片一区二区三区观看 | 一区二区三区产品免费精品久久75 | 国精产品99永久一区一区| 美国成人毛片| 欧美精品 日韩| 亚洲午夜av在线| 91久久精品一区| 国产精品日韩久久久久| 久久精品一区二区三区不卡牛牛| 久久精品一区二区三区中文字幕| 亚洲精品国产视频| 午夜精彩视频在线观看不卡 | 亚洲视频综合| 亚洲黄色视屏| 亚洲一区二区三区免费视频| 亚洲国产91精品在线观看| 亚洲深爱激情| 亚洲精品韩国| 久久精品国产综合| 亚洲欧美一区二区三区极速播放| 美女诱惑一区| 性欧美长视频| 91久久久久久国产精品| 在线亚洲自拍| 久久影院午夜论| 国产精品久久久久aaaa九色| 欧美大片在线观看| 国产精品久久一区主播| 久久综合久久美利坚合众国| 欧美性视频网站| 欧美mv日韩mv国产网站app| 欧美日本三区| 欧美在线精品免播放器视频| 欧美日韩精品免费看| 久久久人成影片一区二区三区观看 | 久久久久国产一区二区| 亚洲伊人色欲综合网| 亚洲国产欧美不卡在线观看| 一区二区日韩精品| 亚洲视频一区二区| 一道本一区二区| 蜜臀久久久99精品久久久久久 | 国产精品视频九色porn| 欧美成人精品不卡视频在线观看| 欧美日本在线播放| 麻豆九一精品爱看视频在线观看免费| 午夜久久福利| 亚洲少妇最新在线视频| 老司机精品久久| 欧美在线影院| 午夜亚洲福利| 国产亚洲制服色| 亚洲午夜av在线| 一本色道**综合亚洲精品蜜桃冫| 久久在线免费| 在线不卡中文字幕播放| 欧美肥婆在线| 国产在线不卡视频| 亚洲天堂av在线免费| 亚洲精品欧美日韩| 久久久一本精品99久久精品66| 久久久久久国产精品mv| 黑人巨大精品欧美一区二区小视频| 亚洲视频中文| 巨胸喷奶水www久久久免费动漫| 国产精品国产三级国产普通话三级 | 欧美国产亚洲另类动漫| 亚洲精品欧美| 美女精品在线| 亚洲精品偷拍| 午夜日韩在线| 国产美女精品一区二区三区| 久久成人免费| 久久婷婷国产综合国色天香| 亚洲国产精品一区二区久| 久久男人资源视频| 亚洲人www| 在线观看福利一区| 欧美日韩第一区日日骚| 亚洲一区二区三区精品在线| 亚洲在线播放电影| 国产午夜精品美女毛片视频| 亚洲一二三级电影| 欧美96在线丨欧| 亚洲欧洲另类国产综合| 欧美日韩亚洲网| 亚洲欧美国产77777| 国产中文一区二区| 欧美日韩不卡| 亚洲性线免费观看视频成熟| 噜噜爱69成人精品| 亚洲青色在线| 国产亚洲精品aa| 蜜桃伊人久久| 亚洲大片av| 久久久久久久久一区二区| 欧美在线国产| 久久久精品动漫| 免费一级欧美片在线播放| 久久动漫亚洲| 亚洲国产经典视频| 欧美三级在线视频| 欧美一区2区视频在线观看| 免费在线观看成人av| 亚洲乱码日产精品bd| 国产精品网站在线播放| 欧美黄色片免费观看| 欧美日韩一区二区在线播放| 日韩视频免费观看| 欧美在线观看网站| 久久嫩草精品久久久久| 夜夜精品视频一区二区| 久久av一区| 亚洲一线二线三线久久久| 国产午夜亚洲精品羞羞网站|