1

ZXing 2.0 を使用して mango 7.1 で QR コードを生成できません。それはかなり簡単なはずですが、うまくいきません。

コード:

QRCodeWriter writer = new QRCodeWriter();
var bMatrix = writer.encode("Hey dude, QR FTW!", BarcodeFormat.QR_CODE, 25, 25);
var asBitmap = bMatrix.ToBitmap();            
image1.Source = asBitmap;

image1 は xaml から取得されます。

bMatrix には必要なデータが含まれているようですが、image1 には何も表示されません。

4

4 に答える 4

3

だから私はなんとか回避策をとることができました。ZXing C#ポートのバグが原因で元のコードが機能しなかったのか、それとも何か間違ったことをしたのかわかりません。とにかく、これが私がQRコードを表示するためにしたことです。

image1はxamlから取得されます。

QRCodeWriter writer = new QRCodeWriter();
var bMatrix = writer.encode("Hey dude! QR FTW!", BarcodeFormat.QR_CODE, width, height);

WriteableBitmap wbmi = new System.Windows.Media.Imaging.WriteableBitmap(width, height);

for (int y = 0; y < height; y++)
{
    for (int x = 0; x < width; x++)
    {
        int grayValue = bMatrix.Array[y][x] & 0xff;
        if (grayValue == 0)                        
            wbmi.SetPixel(x, y, Color.FromArgb(255, 0, 0,0));                                                    
         else
             wbmi.SetPixel(x, y, Color.FromArgb(255, 255, 255, 255));
     }
 }
 image1.Source = wbmi;
于 2012-04-25T09:33:56.343 に答える
1

次のように画像ソースを設定してみてください:

image1 = new ImageBrush { ImageSource = asBitmap ;}
于 2012-04-25T09:39:57.093 に答える
0

私は同じ問題に遭遇します。WriteableBitmap を Image.Source に直接割り当てても機能しませんでした。いくつかの検索の後、SaveJpeg メソッドを使用して WritableBitap を MemoryStream に書き込む強力な回避策を見つけました。

    using (MemoryStream ms = new MemoryStream())
    {
        asBitmap.SaveJpeg(ms, (int)asBitmap.PixelWidth, (int)asBitmap.PixelHeight, 0, 100);
        BitmapImage bmp = new BitmapImage();
        bmp.SetSource(ms);
        Image.Source = bmp;
    }

QRコードが黒/白ではなく、濃い/水色で表示されていない限り、これは機能しました。これを友人に話したところ、彼は、Windows Phone のピクセルの色はバイトではなく整数であることを思い出しました。この知識と zxing のソースを使用して、ByteMatrix.ToBitmap メソッドを次のように変更しました。

    public WriteableBitmap ToBitmap()
    {
        const int BLACK = 0;
        const int WHITE = -1;
        sbyte[][] array = Array;
        int width = Width;
        int height = Height;
        var pixels = new byte[width*height];

        var bmp = new WriteableBitmap(width, height);

        for (int y = 0; y < height; y++)
        {
            int offset = y*width;
            for (int x = 0; x < width; x++)
            {
                int c = array[y][x] == 0 ? BLACK : WHITE;
                bmp.SetPixel(x, y, c);
            }
        }

        //Return the bitmap
        return bmp;
    }

これにより、WritableBitmap を Image.Source に直接割り当てても、問題はまったく解決されました。画像は正しく割り当てられているように見えましたが、アルファ値は透明で、jpeg の作成時に削除されました。

于 2013-02-02T22:29:52.523 に答える
-1

最も簡単な解決策:

Uri uri = new Uri("http://www.esponce.com/api/v3/generate?content=" + "your content here" + "&format=png");

image1.Source = new BitmapImage(uri);
于 2012-07-12T06:24:06.530 に答える