3

我在 IImageProvider 接口后面有一个图像源,我正在尝试访问它的像素。

IImageProvider里面有一个方法:imageProvider.GetBitmapAsync(bitmapToFill)

  • 我无法获得 WriteableBitmap,因为我在非 UI 线程上运行。我无法实例化一个空的 WriteableBitmap 来写入它是不幸的,因为我可以从中访问像素..
  • 我可以用数据填充 Bitmap 对象,但无法在 Windows Phone 上访问它的像素(它缺少 system.drawing...)

如何访问 IImageProvider 背后源的单个像素?

4

2 回答 2

3

你试过这个吗?

var bitmap = await imageSource.GetBitmapAsync(null, OutputOption.PreserveAspectRatio);
var pixels = bitmap.Buffers[0];
for (uint i = 0; i < pixels.Buffer.Length; i++)
    {
        var val = pixels.Buffer.GetByte(i);
    }
  • 我 = R ... [0]
  • i+1 = G ... [1]
  • i+2 = B ... [2]
  • i+3 = A ... [3]

等等

imageSource 是您的 IImageProvider,我使用 BufferImageSource 对其进行了测试。

于 2013-12-08T18:13:06.910 回答
2

一个稍微更有效的选择是这个。

在您自己的(空)像素的 .NET 数组上创建一个位图,然后使用 GetBitmapAsync 来填充它。渲染完成后,您可以在传递的原始数组中找到结果。

byte[] myPixels = new byte[correctSize]; // You can use a ColorModeDescriptor to calculate the size in bytes here.

using(var wrapperBitmap = new Bitmap(widthAndHeight, colorMode, pitch, myPixels.AsBuffer()))
{
    await interestingImage.GetBitmapAsync(wrapperBitmap, OutputOption.PreserveAspectRatio);
}

// and use myPixels here.
于 2013-12-14T21:42:09.803 回答