使用英语阅读

通过


WriteableBitmap.PixelBuffer 属性

定义

获取写入 WriteableBitmap 的每个像素的直接缓冲区的访问权限。

public IBuffer PixelBuffer { get; }

属性值

对像素缓冲区的引用。

示例

此代码示例使用 WriteableBitmapPixelBuffer 属性写入其像素内容。

C# 示例来自一个更大的代码示例,即 SDK XAML 图像示例。 显示的 C# 代码是最终使用 WriteableBitmap 作为 Image.Source 值并显示图像的转码方案的一部分。

其他语言中的示例的范围和/或自包含性稍大一些。

using (IRandomAccessStream fileStream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read)) 
{
    BitmapDecoder decoder = await BitmapDecoder.CreateAsync(fileStream); 
    // Scale image to appropriate size 
    BitmapTransform transform = new BitmapTransform() {  
        ScaledWidth = Convert.ToUInt32(Scenario4WriteableBitmap.PixelWidth), 
        ScaledHeight = Convert.ToUInt32(Scenario4WriteableBitmap.PixelHeight)
    }; 
    PixelDataProvider pixelData = await decoder.GetPixelDataAsync( 
        BitmapPixelFormat.Bgra8, // WriteableBitmap uses BGRA format 
        BitmapAlphaMode.Straight, 
        transform, 
        ExifOrientationMode.IgnoreExifOrientation, // This sample ignores Exif orientation 
        ColorManagementMode.DoNotColorManage
    ); 

    // An array containing the decoded image data, which could be modified before being displayed 
    byte[] sourcePixels = pixelData.DetachPixelData(); 

    // Open a stream to copy the image contents to the WriteableBitmap's pixel buffer 
    using (Stream stream = Scenario4WriteableBitmap.PixelBuffer.AsStream()) 
    { 
        await stream.WriteAsync(sourcePixels, 0, sourcePixels.Length); 
    }                     
}

注解

备注

使用靠近标题) 的语言选取器 (为代码示例选择编程语言。

PixelBuffer 返回的 IBuffer 不能直接写入。 但可以使用特定于语言的技术写入缓冲区中的基础像素内容。

  • 若要从 C# 或 Microsoft Visual Basic 访问像素内容,可以使用 WindowsRuntimeBufferExtensions.AsStream 方法 以流的形式访问基础缓冲区。 C# 代码示例中显示了这一点。
  • 若要从 C++/WinRT 访问像素内容,有三种替代方法。 只要不是 using namespace winrt;,就可以包含 SDK 头文件 robuffer.h ,以引入 IBufferByteAccess COM 接口的定义。 但是,由于 using namespace winrt; 很常见,因此你也可以在项目中的一个位置定义 IBufferByteAccess 接口 (请参阅 C++/WinRT 代码示例,了解) 方式。 使用这两种方法之一定义 IBufferByteAccess 后,可以查询 PixelBuffer 以获取 IBufferByteAccess 实例。 然后调用 IBufferByteAccess::Buffer 方法来 检索指向表示像素内容的字节缓冲区的指针。 C++/WinRT 代码示例中显示了这一点。 C++/WinRT 代码示例) 中显示的第三个替代 (是,通过检索uint8_t*可从可使用 调用WriteableBitmap.PixelBuffer().data()的帮助程序函数返回的 ,完全避免使用 IBufferByteAccess
  • 若要从 C++/CX 访问像素内容,可以查询 PixelBuffer 以获取 IBufferByteAccess 接口,该接口是 COM 接口。 添加 robuffer.h。 然后,可以调用 IBufferByteAccess::Buffer 方法来 检索指向表示像素内容的字节缓冲区的指针。 C++/CX 代码示例中显示了这一点。

适用于

另请参阅