我在使用c# Graphics类的DrawImage做图像拼接的时候。发现这个方法如果使用的重载方法不对的话,图像拼接会出现问题。
Bitmap bitmapJoint = new Bitmap(width, height);
Graphics graph = Graphics.FromImage(bitmapJoint);
graph.DrawImage(bitmapJoint, width, height);
graph.Clear(System.Drawing.Color.Gray);
int currentHeight = 0;
// Bitmap拼接
foreach (Bitmap bitmap in jointList)
{
if (bitmap != null)
{
// 这里如果使用public void DrawImage(Image image, int x, int y);这个重载方法,拼接后的图像会变小。
graph.DrawImage(bitmap, 0, currentHeight);
currentHeight += bitmap.Height;
bitmap.Dispose();
}
}
拼接图像效果如下。
从实际的画图效果看并没有填满整个宽度。实际上是没有使用正确的。下边的函数才是正确的。 这样
//
// 摘要:
// 在指定位置并且按指定大小绘制指定的 System.Drawing.Image。
//
// 参数:
// image:
// 要绘制的 System.Drawing.Image。
//
// x:
// 所绘制图像的左上角的 x 坐标。
//
// y:
// 所绘制图像的左上角的 y 坐标。
//
// width:
// 所绘制图像的宽度。
//
// height:
// 所绘制图像的高度。
//
// 异常:
// T:System.ArgumentNullException:
// image 为 null。
public void DrawImage(Image image, int x, int y, int width, int height);
这样就可以了:
Bitmap bitmapJoint = new Bitmap(width, height);
Graphics graph = Graphics.FromImage(bitmapJoint);
graph.DrawImage(bitmapJoint, width, height);
graph.Clear(System.Drawing.Color.Gray);
int currentHeight = 0;
// Bitmap拼接
foreach (Bitmap bitmap in jointList)
{
if (bitmap != null)
{
graph.DrawImage(bitmap, 0, currentHeight,bitmap.Width, bitmap.Height);
currentHeight += bitmap.Height;
bitmap.Dispose();
}
}
这样编写后重新绘制的图像效果如下,特殊原因把图像做了处理。
好了,总结一下需要拼接图像绘制时记得使用如下方法
public void DrawImage(Image image, int x, int y, int width, int height);