GDI+以前只是聽說過,還沒怎么用過,這段時間用了用,覺得挺好用的.在這里總結一下.留個備忘.
GDI+(Graphics Device Interface plus)是Windows XP中的一個子系統,它主要負責在顯示屏幕和打印設備輸出有關信息,它是一組通過C++類實現的應用程序編程接口。由於它是圖形繪制相關的接口,那先了解一下常用的幾種圖片格式.
常見的圖片格式
常見的圖片格式有JPEG, BMP, PNG.
- JPEG:它用有損壓縮方式去除冗余的圖像或彩色數據, 獲取得極高的壓縮率的同時展現了十分豐富生動的圖像.應用最為廣泛.引用JPEG單元, 通TJPEGimage類進行讀取.
- BMP:它是bitmap(位圖)的簡稱, 它是window操作系統中標准圖像文件格式,能夠被多種window應用程序支持,特點在於包含的圖像信息豐富,幾乎不進行壓縮, 但是因為這個,它占用的空間比較大.Delphi里TImage里需要的格式就是BMP.引用Graphics單元, 通過TBitmap進行讀取.
- PNG: 它是新興的網絡圖像格式, 是目前最不失真的格式, 相對於除BMP格式外.需要提到的它支持透明圖像的制作.這樣就可以實現在圖像上加水印的功能.引用pngImage單元, 通過TPNGImage類可以加載PNG圖像.
不同圖片格式的轉換
PNG轉換成Bitmap
var
oBitMap: TBitMap;
oPNG: TPNGImage;
begin strFileName := '1.png'; oBitMap := TBitMap.Create; oPNG := TPNGImage.Create; try oPng.LoadFromFile(strFileName); oBitMap.Width := 100; oBitMap.Height := 200; oBitMap.Canvas.Draw(0, 0, oPng); finally oBitMap.Free; oPng.Free; end;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
BMP轉換成IStream
oBitMap := TBitMap.Create; try oBitmap.loadFromFile('1.bmp'); oStream := TMemoryStream.Create; try oBitmap.SaveToStream(oStream); oStream.Position := 0; oStreamAdapter := TStreamAdapter.Create(oStream); // do something finally oStream.free; oStreamAdapter := nil; //需要注意,不能直接Free, 是接口,帶有引用計數 end; finally oBitmap.free; end;
GDI+的基本用法
引用GDIPOBJ, GDIPAPI這兩個單元, 需要在開始之前需要調用調用初始化方法, 主要是加載dll及初始化相關的方法.
基本用法如下:
oImage1 := TGPImage.Create('Photo_1.jpg'); oImage2 := TGPImage.Create('Photo_2.jpg'); oImage3 := TGPImage.Create('Photo_3.jpg'); oImage4 := TGPImage.Create('Photo_4.jpg'); g1 := TGPGraphics.Create(image1.Canvas.Handle); g1.DrawImage(oImage1, 0, 0, oImage1.GetWidth, oImage1.GetHeight); g1.DrawImage(oImage2, oImage1.GetWidth, 0, oImage2.GetWidth, oImage2.GetHeight); g1.DrawImage(oImage3, 0, oImage1.GetHeight, oImage3.GetWidth, oImage3.GetHeight); g1.DrawImage(oImage4, oImage1.GetWidth, oImage1.GetHeight, oImage4.GetWidth, oImage4.GetHeight);
上面的代碼相當於是把四幅圖畫在一幅圖上.其它的一些用法參考TGPGraphics相關接口.
http://blog.csdn.net/hpjx1987/article/details/51056978