`
jiasongmao
  • 浏览: 666801 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

基于像素的图像合成(For WPF)

    博客分类:
  • WPF
阅读更多

     传统的基于GDI或GDI+的图形开发大家再熟悉不过了,通过Drawing类可以轻松的对位图进行处理,那么在WPF中的Media类是否也拥有同样类似的方法功能呢?这是肯定的。

     本节我以精灵装备合成Show(纸娃娃)为例向大家演示如何在WPF中实现基于像素的图象合成。 首先准备一下合成用的素材:

 

 

接下来是进行绘图的第一步:创建绘图工具实例并开启绘图:

     DrawingVisual drawingVisual = new DrawingVisual();

     DrawingContext drawingContext = drawingVisual.RenderOpen();

接着按深度顺序从底到外逐个对象绘制:

     BitmapSource weapon = GetImage(

string.Format("Image/Weapon_{0}.png",

(comboBox1.SelectedItem as ComboBoxItem).Content)

);

     drawingContext.DrawImage(weapon, new Rect(18, 18, 120, 120));

通过以上代码,我们将位于"Image/Weapon_{0}.png"的武器图片绘制到一个x,y方向偏移量分别为(18,18)的120*120像素的矩形上,其中的GetImage方法为:

        //图片加载

        private BitmapSource GetImage(string uri) {

            try {

                return BitmapFrame.Create(new Uri(string.Format(@"{0}", uri), UriKind.Relative));

            } catch {

                return null;

            }

        }

然后通过相类似的代码再分别依次绘制身体、左手、右手、头部、坐骑等部位:

//绘制身体

     BitmapSource body = GetImage(

string.Format("Image/Body_{0}.png",

(comboBox2.SelectedItem as ComboBoxItem).Content)

);

     drawingContext.DrawImage(body, new Rect(50, 50, 100, 100));

//绘制左手

     BitmapSource LeftHand = GetImage(

string.Format("Image/LeftHand_{0}.png",

(comboBox3.SelectedItem as ComboBoxItem).Content)

);

     drawingContext.DrawImage(LeftHand, new Rect(72, 52, 30, 30));

//绘制右手

     BitmapSource RightHand = GetImage(

string.Format("Image/RightHand_{0}.png",

(comboBox4.SelectedItem as ComboBoxItem).Content)

);

     drawingContext.DrawImage(RightHand, new Rect(98, 59, 30, 30));

//绘制头部

     BitmapSource Head = GetImage(

string.Format("Image/Head_{0}.png",

(comboBox5.SelectedItem as ComboBoxItem).Content)

);

     drawingContext.DrawImage(Head, new Rect(86, 38, 20, 30));

//绘制坐骑

     BitmapSource Horse = GetImage(

string.Format("Image/Horse_{0}.png",

(comboBox6.SelectedItem as ComboBoxItem).Content)

);

     drawingContext.DrawImage(Horse, new Rect(63, 71, 70, 120));

所有对象绘制完后即可以关闭画板并呈现出来:

     drawingContext.Close();

     RenderTargetBitmap composeImage = new RenderTargetBitmap(200, 200, 0, 0, PixelFormats.Pbgra32);

     composeImage.Render(drawingVisual);

最后将composeImage这个合成的图片作为图片源赋值给精灵即完成了整个合成流程:

Spirit.Source = composeImage;

实现后的系统界面如下:

本节以展示如何在WPF中对像素位图进行合成,由于素材资源有限,因此无法为大家演示动画效果的纸娃娃图片合成系统。但是万变不离其中,只要您掌握了本文的方法并合理的处理好图片组的缓存,这将为您的图片合成带来更高的性能与效果。

下一节我将为大家讲解如何在Silverlight中实现一模一样的效果,这就是传说中的移植,敬请关注.

 

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/alamiye010/archive/2009/09/20/4572834.aspx

 

分享到:
评论

相关推荐

    图像的油画特效算法

    5. **图像合成**:最后,将经过色彩量化、边缘检测和纹理合成处理的各个部分重新组合成一张具有油画效果的新图像。这一阶段需要考虑像素的混合策略,以确保过渡自然,避免出现突兀的色块。 6. **GUI设计**:在...

    C#数字图像处理算法典型实例

    图像合成包括图像拼接、图像融合等,常用于全景图像创建和多源信息融合。C#提供了基本的位操作和像素级混合函数来实现这一过程。 9. **机器学习应用**: 将图像处理与机器学习结合,如支持向量机(SVM)、神经网络...

    数字图像处理——Visual C#.Net随书光盘机源码

    - 图像合成:通过层叠或混合多个图像来创建新的图像效果。 6. 图像分析与识别:利用机器学习或深度学习技术,可以进行图像分类、目标检测、人脸识别等高级任务。这可能涉及到神经网络库,如TensorFlow.NET或ML.NET...

    C# 图像处理程序源代码

    5. **图像合成**:源代码可能包括图像的合成操作,比如合并多张图片,实现透明度混合,或者进行蒙版操作来组合不同的图像区域。 6. **像素操作**:通过遍历图像的每一个像素,可以执行特定的像素级操作,如像素颜色...

    C#实现图片合成经典源码--201903

    在实际应用中,开发者可能会结合WPF(Windows Presentation Foundation)或WinForms等UI框架来创建用户界面,允许用户选择输入图片、设置合成参数,并显示处理结果。通过学习和研究这些源码,不仅可以了解C#图像处理...

    C#实现图片合成经典源码_《0528》.rar

    这些可以通过像素级别的操作来实现,例如遍历图像的所有像素,根据某种算法改变其颜色值。 7. 性能优化: 图像处理往往涉及到大量的计算,因此性能优化至关重要。C#中的unsafe模式和指针操作可以提高图像处理的...

    图像特效处理专家,C#源代码程序.很全面的解说.

    6. 图像合成:利用Alpha通道可以实现图像的透明度控制和混合效果。通过设置Pen或Brush的Alpha值,可以创建半透明效果,或者使用Blend对象实现更复杂的混合模式。 7. 图像处理算法:C#还可以实现更高级的图像处理...

    C# 图形图像处理光盘源码

    6. **图像合成**:可以将多个图像合并到一起,如水印添加、图层混合等。这通常涉及到DrawImage方法的重叠绘制功能。 7. **图形绘制**:使用Pen和Brush对象,可以在图像上绘制线条、形状、文本等。例如,`using (Pen...

    c# emgucv 实时绿幕抠像源码

    5. 透明度处理:为抠出的人物添加透明通道,以便在WPF中与新的背景合成。 6. 显示结果:将处理后的图像显示在WPF的`Image`控件上,如果算法简陋,可能会导致人物延迟。 尽管这个项目在边缘完整性和人物延迟方面存在...

    毕业设计C#图像处理论文论文,毕业设计论文 用于毕业设计(Image Paper)

    此外,论文还将涉及更高级的图像处理技术,如图像分割、图像配准和图像合成。这些技术在机器学习、计算机视觉和医学成像等领域有着广泛应用。C#结合OpenCV或者Emgu CV库,可以实现更复杂的图像处理任务,如目标检测...

    图像处理-单机版(C#)photoshop

    在图像处理领域,C#提供了丰富的类库,如System.Drawing和System.Windows.Media.Imaging,这些类库使得开发者能够轻松地访问和操作像素数据、执行颜色变换、应用滤镜、进行图像合成等。在本项目中,我们可以预见到...

    C# 图片添加水印(图片或者文字)

    - **位图操作**:通过直接操作像素数据,在原图像上覆盖或混合水印图像或文字。 - **绘图对象**:使用WPF的`System.Windows.Media.Drawing`命名空间中的类,如`DrawingContext`和`Geometry`,可以创建和绘制水印。...

    Photosprite

    《Photosprite》是一款基于C#开发的图像处理软件,其源代码是专为VS2005设计的,与图书《图像编程精髓:从开发自己的Photoshop开始》配套使用,旨在帮助开发者深入理解和实践图像处理技术。这个项目不仅提供了一个...

    C#图像透明度调整的方法

    这个函数可以作为一个基础,用于更复杂的图像处理任务,比如添加动态效果或进行图像合成。 总的来说,C#提供了强大的图像处理能力,通过直接操作像素,我们可以实现各种图像效果,包括透明度调整。在处理大量图像或...

    图像转换:从灰度到彩色

    这个过程涉及了数字图像处理的基础知识,包括颜色空间转换、图像像素操作以及编程实现。描述中的"轻松转换图像的算法"暗示我们将探讨一种高效且简洁的方法。 首先,我们要理解灰度图像与彩色图像的区别。灰度图像只...

    c#图片管理工具

    本项目是一个基于C#实现的图片管理编辑工具软件,它整合了多种实用功能,如图片编辑、图片上传、图片采集和图片处理,旨在提供一站式解决方案来帮助用户管理和操作他们的图像资源。 首先,我们要理解C#图片管理的...

    珠珠图案生成.NET C# 开发

    4. **图像处理**:生成珠珠图案涉及到图像处理技术,包括像素操作、颜色映射和图像合成等。C#可以通过System.Drawing或更高级的ImageSharp等库来实现这些功能,生成预览和导出最终的珠珠图案。 5. **算法设计**:...

    遥感影像读取及显示

    遥感影像的原始数据通常是无彩色的,需要通过色彩映射或假彩色合成将其转换为彩色图像。C#程序可以利用GDAL的色彩表或自定义色彩规则进行这一步骤。如果影像带有内建的色彩表,可以使用`Band.GetColorTable()`获取;...

    ConsoleApp5.zip

    在C#编程环境中,将多张图片拼接或叠加合成一张图片是一项常见的图像处理任务,尤其在创建动态图像、报告生成或数据可视化时。本文将详细介绍三种不同的方法来实现这一功能,结合`ConsoleApp5.zip`中的代码示例,...

Global site tag (gtag.js) - Google Analytics