首页 / C# / 使用C#实现图片拼接
使用C#实现图片拼接
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用C#实现图片拼接,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1914字,纯文字阅读大概需要3分钟。
内容图文
本文记录一次 拼接图片的 需求,大致需求是这样,使用一款线阵相机拍摄图片,而每次拍摄尺寸是有限的,比如我这里需要拍摄一整个汽车的车底。所以再给相机设置好行平,图片尺寸等各种参数后,最终相机每拍摄一张,我就可以取到一张,同步进行图片的拼接处理,直到停止拍摄,最终生成一张图片。具体拼接的代码在本文最后。
1、创建一个用于保存图片的队列
private object lockQueue = new object(); //队列锁
private Queue<Image> imageQueue = new Queue<Image>();
2、将获取到的图片流转为Image类型然后入队
var imagebuffer = xxxxxx;
byte[] picBuffer = new byte[imageInfo.width];
Marshal.Copy(imagebuffer, picBuffer, 0, picBuffer.Length);
MemoryStream ms = new MemoryStream(picBuffer);
var imageData = Image.FromStream(ms);
lock (lockQueue)
{
//入队
imageQueue.Enqueue(imageData);
//通知等待队列中的线程锁定对象状态的更改(这个一般配合Monitor.Wait使用)
Monitor.Pulse(lockQueue);
}
3、定义一个图片操作处理方法
以下为业务代码,没啥太大的参考意义可直接掠过,其主要就是实现当有大于1张图片时从队列出取出图片开始拼接。多线程操作记得加锁。
private void PictureHandler()
{
Task.Run(() =>
{
while (isStart)
{
if (imageQueue.IsEmpty())
{
lock (lockQueue)
{
Monitor.Wait(lockQueue);
}
continue;
}
System.Drawing.Image image = null;
lock (lockQueue)
{
image = imageQueue.Dequeue();
}
if (SourceImage == null)
{
SourceImage = image;
}
else
{
lock (obj)
{
//拼接图片
SourceImage = JoinImage(SourceImage, image);
}
}
}
});
}
4、拼接图片实现方法
需要注意的是是想让图片横向拼接还是竖向拼接,以下是竖向拼接,可以封装的更好一些,传入一个枚举来确定拼接方向,graph.DrawImage中的第二个参数和第三个参数X、Y坐标用来控制。
/// <summary>
/// 图片拼接
/// </summary>
/// <param name="sourceImg">图片1</param>
/// <param name="newImg">图片2</param>
/// <returns>拼接后的图片</returns>
private static Image JoinImage(Image sourceImg, Image newImg)
{
int imgHeight = 0, imgWidth = 0;
imgWidth = sourceImg.Width;
imgHeight = sourceImg.Height + newImg.Height;
Bitmap joinedBitmap = new Bitmap(imgWidth, imgHeight);
using (Graphics graph = Graphics.FromImage(joinedBitmap))
{
graph.DrawImage(sourceImg, 0, 0, sourceImg.Width, sourceImg.Height);
graph.DrawImage(newImg, 0, sourceImg.Height, newImg.Width, newImg.Height);
}
return joinedBitmap;
}
原文:https://www.cnblogs.com/chonglu/p/15146914.html
内容总结
以上是互联网集市为您收集整理的使用C#实现图片拼接全部内容,希望文章能够帮你解决使用C#实现图片拼接所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。