GDI:
常用的繪圖方式,但是壓縮算法太差,大圖壓縮失真嚴重,并且支持圖片類型太少,支持bmp.
一些繪圖方法參考另一文章:圖片鏤空算法集合
CxImage:
是一個開源庫,功能強大,其官方主頁http://www.xdp.it/cximage/
常用的5種:bmp,gif,png,jpg,ico
其他類型:tif,tga,pcx,wbmp,wmf,jp2,jpc,pgx,pnm,ras,jbg,mng,ska,raw
CxImage壓縮算法較好,繪圖速度快,4400*3000左右像素圖片,容量3M左右,壓縮到50*50,在快速拉動圖片,并移動時,一點也不卡。
VS7.1環境配置
lib路徑:在工程配置->連接器->常規->附加目錄庫
加載lib:在工程配置->連接器->輸入->附加依賴項
cximage.lib
jasper.lib
jbig.lib
Jpeg.lib
png.lib
Tiff.lib
zlib.lib
mng.lib
libdcr.lib
頭文件路徑:在工程配置c/c++->常規->附加包含目錄
使用:只需要包含"xImage.h"
CxImage image;
image.Load(),CreateFromHBITMAP()等函數導入圖片
image.Stretch(HDC,x,y,width,height);
GDI+:
同樣功能強大,支持:bmp,jpg,gif,tiff,png.圖片轉換之前的算法應該是最好的,用大圖去壓縮,圖片效果明顯要比前兩者好。
但是畫大圖時,速度太慢.比如以上4400*3000的圖片,壓縮到50*50,畫圖時間竟然是0.15秒,如果放在快速更新,或者移動的處理時,明顯會延遲.
使用前,需要在APP文件中初使化GDI+
DWORD m_gdiplusToken;
CGameApp::InitInstance()
{
Gdiplus::GdiplusStartupInput gdiplusStartupInput;
Gdiplus::GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);
}
int CGameApp::ExistInstance()
{
Gdiplus::GdiplusShutdown(m_gdiplusToken);
return 0;
}
Bitmap * pBmp = Bitmap::FromHBITMAP() 或者 Bitmap::FromFile() 等函數導入圖片
Graphics gr(HDC);
gr.DrawImage(pBmp,x,y,Width,Height);
總結:
1、一般繪圖用GDI
2、需要不同類型的圖片格式,并且要快速繪圖的用CxImage
3、需要不同類型的圖片格式,且要高質量圖片效果的用GDI+
本文來自:http://blog.csdn.net/xuweiqun/archive/2009/07/20/4363627.aspx