CImage类的使用介绍!
鏈接參考:http://www.cnblogs.com/juncheng/articles/1600730.html
CImage是MFC和ATL共享的新類,它能從外部磁盤中調(diào)入一個(gè)JPEG、GIF、BMP和PNG格式的圖像文件加以顯示,而且這些文件格式可以相互轉(zhuǎn)換。例如通過簡(jiǎn)單的幾句,就可以實(shí)現(xiàn)CImage類和CBitmap類實(shí)例的轉(zhuǎn)換:
HBITMAP hBitmap=image.Detach();
CBitmap bmp;
bmp.Attach(hBitmap);
這樣一來,就又回歸到以前操縱CBitmap的方式了.CImage本身封裝了DIB(設(shè)備無關(guān)位圖)的功能,因而能夠處理每個(gè)位圖像素。
它具有下列最酷特性:
1、AlphaBlend支持像素級(jí)的顏色混合,從而實(shí)現(xiàn)透明和半透明的效果。
2、PlgBlt能使一個(gè)矩形區(qū)域的位圖映射到一個(gè)平行四邊形區(qū)域中,而且還可能使用位屏蔽操作。
3、TransparentBlt在目標(biāo)區(qū)域中產(chǎn)生透明圖像,SetTransparentColor用來設(shè)置某種顏色是透明色。
4、MaskBlt在目標(biāo)區(qū)域中產(chǎn)生源位圖與屏蔽位圖合成的效果。
由于CImage在不同的Windows操作系統(tǒng)中其某些性能是不一樣的,因此在使用時(shí)要特別注意。例如,CImage::PlgBlt和CImage::MaskBlt只能在 Windows NT 4.0 或更高版本中使用,但不能運(yùn)行在Windows 95/98 應(yīng)用程序中。CImage::AlphaBlend和CImage::TransparentBlt也只能在 Windows 2000/98或其更高版本中使用。即使在Windows 2000運(yùn)行程序還必須將stdafx.h文件中的WINVER和_WIN32_WINNT的預(yù)定義修改成0x0500才能正常使用。
(1):MFC中顯示圖像的類CImage:
我使用的函數(shù):
void CAviTestDlg::showCimage(CImage &image) { //CImage image; //創(chuàng)建圖片類 //image.Load(rphoto); //根據(jù)圖片路徑加載圖片 CRect rect;//定義矩形類 int cx = image.GetWidth();//獲取圖片寬度 int cy = image.GetHeight();//獲取圖片高度 GetDlgItem(IDC_SHOWPIC)->GetWindowRect(&rect);//將窗口矩形選中到picture控件上 ScreenToClient(&rect);//將客戶區(qū)選中到Picture控件表示的矩形區(qū)域內(nèi) GetDlgItem(IDC_SHOWPIC)->MoveWindow(rect.left, rect.top, cx, cy, TRUE);//將窗口移動(dòng)到Picture控 CWnd *pWnd=GetDlgItem(IDC_SHOWPIC);//獲得pictrue控件窗口的句柄 pWnd->GetClientRect(&rect);//獲得pictrue控件所在的矩形區(qū)域 CDC *pDC=pWnd->GetDC();//獲得pictrue控件的DC image.Draw(pDC->m_hDC, rect); //將圖片畫到Picture控件表示的矩形區(qū)域 ReleaseDC(pDC);//釋放picture控件的DC }(2):CImage(MFC) 加載剪貼板圖像數(shù)據(jù)
CView *cv=this; CImage* m_image; OpenClipboard(NULL); HANDLE h=::GetClipboardData(CF_BITMAP); if(h==0) { CloseClipboard(); return; } BITMAP bm; GetObject(h,sizeof(bm),&bm); if(m_image!=NULL) { delete m_image; m_image=NULL; } m_image=new CImage(); m_image->Create(bm.bmWidth,bm.bmHeight,32,0); HDC hdc=m_image->GetDC(); CDC imgDC; imgDC.Attach(hdc); CBitmap *pBmp=new CBitmap; pBmp->Attach(h); CClientDC dc(cv); CDC memDC; memDC.CreateCompatibleDC(&dc); CBitmap *pOldBitmap=memDC.SelectObject(pBmp); imgDC.BitBlt(0,0,bm.bmWidth,bm.bmHeight,&memDC,0,0,SRCCOPY); memDC.SelectObject(pOldBitmap); pBmp->Detach(); delete pBmp; imgDC.Detach(); m_image->ReleaseDC();(3):微軟官方說明:http://technet.microsoft.com/zh-cn/magazine/k826sz5e(en-us,VS.80).aspx
類的使用:http://msdn.microsoft.com/zh-cn/library/bwea7by5(v=vs.80)
Creates a?CImage?bitmap and attach it to the previously constructed?CImage?object.
BOOL Create(int nWidth,int nHeight,int nBPP,DWORD dwFlags = 0 ) throw( );
Parameters
nWidthThe width of the?CImage?bitmap, in pixels.
The height of the?CImage?bitmap, in pixels. If?nHeight?is positive, the bitmap is a bottom-up DIB and its origin is the lower left corner. If?nHeight?is negative, the bitmap is a top-down DIB and its origin is the upper left corner.
The numbers of bits per pixel in the bitmap. Usually 4, 8, 16, 24, or 32. Can be 1 for monochrome bitmaps or masks.
Specifies if the bitmap object has an alpha channel. Can be a combination of zero or more of the following values:
-
createAlphaChannel???Can only be used if?nBPP?is 32, and?eCompression?is?BI_RGB. If specified, the created image has an alpha (transparency) value for each pixel, stored in the 4th byte of each pixel (unused in a non-alpha 32-bit image). This alpha channel is automatically used when callingCImage::AlphaBlend.
總結(jié)
以上是生活随笔為你收集整理的CImage类的使用介绍!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图形操作类CBitmap 把内存数据输出
- 下一篇: 中国汽车动力电池产业创新联盟:将提出动力