最近項目中有個需求,需要將多張位圖拼接成一張整體圖,由於機器限制,需要考慮到處理時間。
我采用的處理方式是:按整體圖的大小創建一塊畫布=>將每一張圖貼在整體圖的指定位置。
貼圖的方法采用的 Graphics.DrawImage()中的兩個重載:
1、Graphics.DrawImage(Image image,int x, int y);將位圖按原始物理大小畫在畫布的指定位置。
這里有個原始物理大小,並不是位圖的像素,而是根據像素大小和圖片的分辨率計算出來的尺寸(The physical width, measured in inches, of an image is the pixel width divided by the horizontal resolution.)。
2、Graphics.DrawImage(Image image,int x, int y,int width,int height);將位圖按指定大小畫在畫布的指定位置。
方法一可以快速的處理(不需要進行縮放),方法二處理速度較慢(需要進行縮放操作)。
但是使用方法一時,如果貼入的圖片分辨率和畫布的分辨率不一致時,拼出來的圖片並不是期待的結果。
查找資料,發現System.Drawing.Bitmap對象有個方法 SetResolution(int x,int y),可以直接設置圖片的分辨率。
所以最終的處理方案為:按整體圖的大小創建一塊畫布=>更改子圖的分辨率=>將每一張圖貼在整體圖的指定位置。