WPF and Silverlight学习笔记(二十八):基本图形的使用(3)图形的操作

接上一篇文章,在WPF中对图形进行操作,上一篇文章中使用了ImageSource (BitmapSource)中的两种:

1、使用BitmapImage加载图片2、使用 RenderTargetBitmap创建图片3、使用RenderTargetBitmap修改图片

本 文继续

4、使用WriteableBitmap修改图片

在使用 RenderTargetBitmap修改图片中,原图片不变,只相当于在原图片的基础上添加 一节新的内容,而如果对图片进行大的更改RenderTargetBitmap就不可以了,我 们可以使用WriteableBitmap对图片进行修改,例如将生成一个返向位图:

1: <Window x:Class="WPF_28.Window1"
2:    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation& quot;
3:    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4:   Title="Window1" Height="300"  Width="300" Loaded="Window_Loaded">
5:    <Grid>
6:     <Grid.RowDefinitions>
7:        <RowDefinition Height="1*" />
8:        <RowDefinition Height="1*" />
9:      </Grid.RowDefinitions>
10:     <Image  Grid.Row="0" x:Name="sourceImage"  Source="http://images.cnblogs.com/logo.gif" />
11:      <Image Grid.Row="1"  x:Name="targetImage" />
12:   </Grid>
13: </Window>

1: private void  BuildImage()
2: {
3:   BitmapImage img = new  BitmapImage();
4:   img.BeginInit();
5:
6:    img.UriSource = new Uri ("http://images.cnblogs.com/logo.gif");
7:
8:    img.DownloadCompleted += delegate
9:   {
10:      BitmapSource source = new FormatConvertedBitmap(
11:        img, PixelFormats.Pbgra32, null, 0);
12:
13:      WriteableBitmap bmp = new WriteableBitmap(source);
14:
15:     int width = bmp.PixelWidth;
16:      int height = bmp.PixelHeight;
17:
18:     int[]  pixelData = new int[width * height];
19:     int  widthInBytes = 4 * width;
20:
21:      bmp.CopyPixels(pixelData, widthInBytes, 0);
22:
23:      for (int i = 0; i < pixelData.Length; i++)
24:      {
25:       pixelData[i] ^= 0x00ffffff;
26:      }
27:
28:     bmp.WritePixels(new Int32Rect(0,  0, width, height), pixelData, widthInBytes, 0);
29:
30:     targetImage.Source = bmp;
31:   };
32:
33:   img.EndInit();
34: }
35:
36:  private void Window_Loaded(object sender, RoutedEventArgs e)
37: {
38:   BuildImage();
39: }

执行后的 结果如下图所示:

时间: 2024-10-30 16:25:56

WPF and Silverlight学习笔记(二十八):基本图形的使用(3)图形的操作的相关文章

WPF and Silverlight学习笔记(十八):WPF样式(Style)与模板(Template)

一.WPF样式 类似于Web应用程序中的CSS,在WPF中可以为控件定义统 一的样式(Style).样式属于资源的一种,例如为Button定义统一的背景颜色 和字体: 1: <Window.Resources> 2: <Style 3: TargetType="Button"> 4: <Setter Property="Background" Value="Yellow" /> 5: <Setter Pr

WPF and Silverlight学习笔记(十二)

WPF and Silverlight学习笔记(十二):WPF Panel内容模型.Decorator内容模型及其他 一.Panel内容模型 Panel内容模型指从 System.Windows.Controls.Panel继承的控件,这些控件都是容器,可以在内部 承载其他的控件和子容器.Panel内容模型包含的容器有: Canvas DockPanel Grid TabPanel ToolBarO verflowPanel UniformGrid StackPanel ToolBarPanel

WPF and Silverlight学习笔记(十六):WPF资源(Resource)(1)

一.什么是资源 通常使用 WPF 资源作为重用通常定义的对象和值的 简单方法.例如定义一种可以复用的单色的Brush对象,按钮的背景及矩形的填 充颜色均使用此Brush: 1: <Window x:Class="WPFResource.WinBasicResource" 2: xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation& quot; 3: xmlns:x="http:

WPF and Silverlight学习笔记(十五):WPF命令(Commands)

WPF中的命令路由与事件路由是两个很让初学者头痛的概念,对于命令路由可 以理解为,系统(WPF)定义了一系列的操作,在应用程序中可以直接使用.例 如,定义一系列菜单,执行对窗体中文本框的复制.剪切.粘贴操作,简单地可 以这样做: 1: <Grid> 2: <Grid.RowDefinitions> 3: <RowDefinition Height="23" /> 4: <RowDefinition /> 5: </Grid.RowD

WPF and Silverlight学习笔记(十四):键盘输入、鼠标输入、焦点处理

一.键盘类和键盘事件 WPF提供了基础的键盘类 (System.Input.Keyboard类),该类提供与键盘相关的事件.方法和属性,这 些事件.方法和属性提供有关键盘状态的信息.Keyboard的事件也通过 UIElement等XAML基元素类的事件向外提供. 对于键盘操作,其常用的事 件有两组: KeyDown事件和PreviewKeyDown事件:处理键盘键按下 KeyUp事件和PreviewKeyUp事件:处理键盘键抬起 其中KeyDown和 KeyUp事件属于冒泡路由事件,而Prev

WPF and Silverlight学习笔记(十):WPF控件模型

WPF对控件其类型的继承方式如下 (其中绿色表示的类是抽象类,蓝色表示的类是非抽象类) 控 件内容模型 System.Windows.Controls.Control类:表示 用户界面 (UI) 元素的基类,这些元素使用ControlTemplate来定义其外观 ContentControl:ContentControl 是一种包含一段内容的 Control 说明 ContentControl 是一种包含一段内容的 Control. 内容属性 Content 内容模型信息 控件内容模型概述 属于

WPF and Silverlight学习笔记(十九):WPF更换主题

如果要做到一个应用程序其基本的内容不变,但改变整个应用程序的外观可 以这样做: 对于每一套外观定义一个ResourceDictionary 在应用 程序中,动态加载此应用程序(或窗体)的Resource 例如,如下的应用 程序,在选择不同的用户时,显示不同的Canvas背景及图片: 主题样式A : 主题样式B: 主题样式C:

WPF and Silverlight学习笔记(二十五)

WPF and Silverlight学习笔记(二十五):使用CollectionView实现对绑定数据的排序.筛选.分组 在第二十三节,我们使用CollectionView实现了对于绑定数据的导航,除导 航功能外,还可以通过CollectionView对数据进行类似于DataView的排序.筛选 等功能. 一.数据的排序: 使用第二十四节的数据源,查询所有 的产品信息: 1: <Window x:Class="WPF_24.CollectionViewSortData" 2:

WPF and Silverlight学习笔记(七)

WPF and Silverlight学习笔记(七):WPF布局管理之StackPanel.WrapPanel.DockPanel 一.StackPanel StackPanel是以堆叠的方式显示其中的控件 1 .可以使用Orientation属性更改堆叠的顺序 Orientation="Vertical" 默认,由上到下显示各控件 .控件在未定义的前提下,宽度为StackPanel的宽度,高度自动适应控件中内容 的高度 1: <StackPanel Orientation=&q

WPF and Silverlight学习笔记(二十九):Brush(1)

在WPF和Silverlight中,Brush是应用很多的一种类型,主要用于填充各种图 形及控件.Brush及其子类位于System.Windows.Media命名空间,其继承关系如 下图所示: 一.SolidColorBrush SolidColorBrush是最简单的一种Brush,包含 一个Color属性,表示单色的画刷,例如使用红色填充一个矩形: 1: <Rectangle Margin="5" Height="50"> 2: <Recta