将win phone 8.1(silverlight)的WriteableBitmap转换为com.google.zxing的BinaryBitmap

时间:2016-04-08 04:51:01

标签: c# silverlight zxing win-phone-silverlight-8.1

花了将近一天的时间进行搜索,但无法找到合适的解决方案。我正在为我的win 8.1手机应用程序开发一个QR阅读模块,这是基于Silverlight(不是赢得8.1手机本机)

我正在使用zxing lib添加完整的QR模块。我已经达到了我从相机(MediaCapture)获取对象WriteableBitmap的图像,我想使用api QRCodeReader.decode(BinaryBitmap bb)。

我已尝试使用大多数文章所述的RGBLuminanceSource,但它适用于原生应用程序(因为它需要引用System.Windows,这对基于Silverlight的应用程序无效。

有人可以指导我将WriteableBitmap转换为BinaryBitmap吗?

1 个答案:

答案 0 :(得分:0)

我使用PhotoCamera类在zxing前窗口手机8.1上使用了以下代码。现在我不确定这是否仍然适合您,但这里是LuminanceSource派生类。

internal class PhotoCameraLuminanceSource : LuminanceSource
{
    public byte[] PreviewBufferY { get; private set; }

    public PhotoCameraLuminanceSource(int width, int height)
        : base(width, height)
    {
        PreviewBufferY = new byte[width * height];
    }

    public override byte[] Matrix
    {
        get { return (byte[])(Array)PreviewBufferY; }
    }

    public override byte[] getRow(int y, byte[] row)
    {
        if (row == null || row.Length < Width)
        {
            row = new byte[Width];
        }

        for (int i = 0; i < Height; i++)
            row[i] = (byte)PreviewBufferY[i * Width + y];

        return row;
    }
}

然后就这样使用。

PhotoCamera.GetPreviewBufferY(_luminance.PreviewBufferY);

var binarizer = new HybridBinarizer(_luminance);

var binBitmap = new BinaryBitmap(binarizer);

//Use readers to decode possible barcodes.
var result = _QRCodeReader.decode(binBitmap);

其中_luminance的类型为PhotoCameraLuminanceSource