WriteableBitmap 类

2013/12/13

提供一个可写入并可更新的 BitmapSource

Namespace:  System.Windows.Media.Imaging
程序集:  System.Windows(位于 System.Windows.dll 中)

public sealed class WriteableBitmap : BitmapSource

WriteableBitmap 类型公开以下成员。

  名称说明
公共方法WriteableBitmap(BitmapSource)使用提供的 BitmapSource 初始化 WriteableBitmap 类的新实例。
公共方法WriteableBitmap(Int32, Int32)使用提供的维度初始化 WriteableBitmap 类的新实例。
公共方法WriteableBitmap(UIElement, Transform)使用提供的元素和变换初始化 WriteableBitmap 类的新实例。
返回顶部

  名称说明
公共属性Dispatcher获取与此对象关联的 Dispatcher (从 DependencyObject 继承。)
公共属性PixelHeight获取位图的高度(以像素为单位)。 (从 BitmapSource 继承。)
公共属性Pixels获取表示位图 2D 纹理的数组。
公共属性PixelWidth获取位图的宽度(以像素为单位)。 (从 BitmapSource 继承。)
返回顶部

  名称说明
公共方法CheckAccess确定调用线程是否可以访问此对象。 (从 DependencyObject 继承。)
公共方法ClearValue清除依赖项属性的本地值。 (从 DependencyObject 继承。)
公共方法Equals(Object)确定指定的 Object 是否等于当前的 Object (从 Object 继承。)
受保护的方法Finalize允许 Object 在垃圾回收器回收该对象之前尝试释放资源并执行其他清理操作。 (从 Object 继承。)
公共方法GetAnimationBaseValue返回为 Windows Phone 依赖项属性设置的任意基值,在动画不活动时将应用它们。 (从 DependencyObject 继承。)
公共方法GetHashCode用作特定类型的哈希函数。 (从 Object 继承。)
公共方法GetType获取当前实例的 Type (从 Object 继承。)
公共方法GetValueDependencyObject 返回依赖项属性的当前有效值。 (从 DependencyObject 继承。)
公共方法Invalidate请求绘制或重绘整个位图。
受保护的方法MemberwiseClone创建当前 Object 的浅表副本。 (从 Object 继承。)
公共方法ReadLocalValue返回依赖项属性的本地值(如果设置了本地值)。 (从 DependencyObject 继承。)
公共方法Render在位图中呈现元素。
公共方法SetSource设置 BitmapSource 的源。 (从 BitmapSource 继承。)
公共方法SetValueDependencyObject 设置依赖项属性的本地值。 (从 DependencyObject 继承。)
公共方法ToString返回一个字符串,它表示当前的对象。 (从 Object 继承。)
返回顶部

  名称说明
公共扩展方法LoadJpeg将 JPEG 流解码为 WriteableBitmap 对象。 (由 Extensions 定义。)
公共扩展方法SaveJpeg使用用于设置 JPEG 文件的目标宽度和高度的参数,将 WriteableBitmap 对象编码为 JPEG 流。 (由 Extensions 定义。)
返回顶部

当指定 BitmapImage 作为 WriteableBitmap 构造函数的参数时,必须先设置 BitmapImageCreateOptions 属性,然后再用它来构造 WriteableBitmap;否则,将发生异常。

使用 WriteableBitmap 类基于每个框架来更新和呈现位图。下面是 WriteableBitmap 有用的方案的一些示例,以及启用该示例的相关 WriteableBitmap API 的列表:

生成算法图像处理内容,如分形图像

  • 使用 WriteableBitmap(Int32, Int32) 构造一个初始为空但有量纲的 WriteableBitmap

  • Pixels 获取像素数组。

  • 依次通过该数组,设置作为整数值的单个像素值,这些整数值计算为自左乘的 ARGB32。

  • 调用 Invalidate

  • 若要在 UI 中显示图像,请将 WriteableBitmap 用作图像处理控件(如 Image)的源,或用作 ImageBrush 的源图像。

生成从任何 UIElement 开始的可视化树的位图快照

  • 使用 WriteableBitmap.WriteableBitmap 构造 WriteableBitmap

  • 若要在 UI 中显示图像,请将 WriteableBitmap 用作图像处理控件(如 Image)的源,或用作 ImageBrush 的源图像。

  • 如果您希望多次呈现此位图,并为其他快照重新使用该实例,请使用 Render 方法。需要在 Render 后调用 Invalidate,以便呈现新图像。

  • 可以通过将转换传递给构造函数,或通过传递标识转换或 null 取消任何转换保留 UIElement 上的任何现有 RenderTransform

说明注意:

WriteableBitmap 不捕获 WebBrowser 控件或 MediaElement 的内容。此外,它只捕获应用的工作区,这意味着它不会捕获应用栏或系统托盘。

从现有图像获取像素数组

  • 使用 WriteableBitmap.WriteableBitmap 构造 WriteableBitmap。原始源可能已通过 URL 或通过流加载。如果来自某个 URL,此 URL 不能跨域。请参见本主题的“受保护的内容”部分。

  • Pixels 获取像素数组。

  • 依次通过该数组,获取作为整数值的单个像素值,这些整数值计算为自左乘的 ARGB32。

WriteableBitmap 像素格式

当向位图中的像素分配颜色时,请使用自左乘的颜色。WriteableBitmap 使用的格式是 ARGB32(预乘 RGB)。如果您在 Pixels 数组中填充整数值,该格式将变得有意义。

有维数组中的初始像素值为 0,如果保持不变,这将呈现为黑色。

受保护的内容

如果使用跨域内容构造 WriteableBitmap,则 WriteableBitmap 类具有安全模式,该模式限制对 Pixels 数组的访问。例如,使用引用来自另一个域的 URL 的 BitmapImage 构造的 WriteableBitmap 不允许访问其 Pixels 数组。该限制扩展到任何为设置其部分或所有内容而使用 URL 派生属性的 UI 元素。

即使创建自受保护的内容,也仍可以访问 WriteableBitmapPixelHeightPixelWidth 属性。该信息可用于确定内容的自然大小。

以下示例演示如何使用 WriteableBitmap 拍摄图片的快照以及将那些快照显示为缩略图。


<Grid x:Name="LayoutRoot" Background="Transparent">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>

    <StackPanel Name="mainLayout" Orientation="Vertical" 
        HorizontalAlignment="Stretch" Margin="10" Grid.Row="0">
        <Button Content="Create WriteableBitmap" Height="71" Name="createWB" Click="createWB_Click" />
        <Image Source="Background.png" />
    </StackPanel>

    <!-- thumbnails go here -->
    <StackPanel Name="thumbs" Orientation="Horizontal" 
            Margin="10,10,10,10" Grid.Row="1">
    </StackPanel>
</Grid>



private void createWB_Click(object sender, RoutedEventArgs e)
{
    // Create a WriteableBitmap and set it to the main StackPanel.
    WriteableBitmap wb = new WriteableBitmap(mainLayout, null);

    // Create an image of the desired size and set its source to
    // the WriteableBitmap representing the StackPanel.
    Image image = new Image();
    image.Height = 64;
    image.Margin = new Thickness(10);
    image.Source = wb;

    // Display the WriteableBitmap as a thumbnail. 
    thumbs.Children.Add(image);
}


Windows Phone OS

受以下版本支持: 8.0, 7.1, 7.0

Windows Phone

此类型的所有公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

显示:
© 2014 Microsoft