如何访问IImageProvider背后的像素(WP8上的Nokia Imaging SDK)

时间:2013-12-08 11:54:41

标签: c# windows-phone-8 bitmap nokia-imaging-sdk lumia-imaging-sdk

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

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

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

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

2 个答案:

答案 0 :(得分: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);
    }
  • i = R ... [0]
  • i + 1 = G ... [1]
  • i + 2 = B ... [2]
  • i + 3 = A ... [3]

等等

imageSource是你的IImageProvider,我用BufferImageSource测试它。

答案 1 :(得分: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.