ZXing は "zebra crossing" の略らしく、ゼブラクロッシングと読むのが正解っぽい。
検証環境
導入
nuget で ZXing.NET をインストールします。 System.Drawing.Common も使うので入っていなければ一緒に入れるか、実装する際に要求されます。
実装
xaml 側に Image を追加します。
<Image x:Name="QrImage" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="10"/>
今回はコードビハインドに処理を追加します。
var qrCode = new BarcodeWriter { Format = BarcodeFormat.QR_CODE, Options = new QrCodeEncodingOptions { ErrorCorrection = ErrorCorrectionLevel.M, CharacterSet = "ISO-8859-1", // default //CharacterSet = "UTF-8", // japanese Width = 300, Height = 300, Margin = 5, }, }; using (var bmp = qrCode.Write("https://yotiky.hatenablog.com/")) using (var ms = new MemoryStream()) { bmp.Save(ms, ImageFormat.Bmp); var source = BitmapFrame.Create(ms, BitmapCreateOptions.None, BitmapCacheOption.OnLoad); QrImage.Source = source; }
QRコードの内容に日本語が含まれる場合は、"Shift_JIS" を指定する記事が多くありますが、 Not a supported と言われてしまったので、"UTF-8" を使っておきましょう。
パラメータ
BarcodeFormat
バーコードのフォーマットを取得または設定します。この値は、MultiFormatWriterを使用している場合にのみ有効です。
QR_CODE 以外に、ITF(日本でよく見る所謂バーコード)や一次元、二次元のもの10個以上定義されています。
QrCodeEncodingOptions
プロパティ | |
---|---|
Hints | すべてのオプションのデータコンテナを取得します。キーとなる EncodeHintType がすべてのプロパティと対になっている。 |
Height | バーコード画像の高さを指定します。 |
Width | バーコード画像の幅を指定します。 |
PureBarcode | 出力画像に内容文字列を入れないでください。 |
Margin | バーコードを生成する際に使用するマージンをピクセル単位で指定します。意味はフォーマットによって異なります。例えば、ほとんどの1Dフォーマットではバーコードの前後のマージンを水平方向に制御します。 |
GS1Format | データを GS1 標準にエンコードするかどうかを指定します。 |
ErrorCorrectionLevel | QRコードなどで使用する誤り訂正の程度を指定します。タイプはエンコーダに依存します。例えば、QRコードの場合はZXing.QrCode.Internal.ErrorCorrectionLevelとなります。 |
CharacterSet | 適用可能な場合に使用する文字エンコーディングを指定します (System.String 型)。 |
DisableECI | QRコード生成時にECIセグメントを明示的に無効にする QRコードの仕様に反していますが、ECIセグメントが必要な状態でISO-8859-1(デフォルト)からUTF-8に文字コードが切り替わってしまうと、一部の読者に問題が発生します。このプロパティをtrueに設定すると、UTF-8エンコーディングでECIセグメントが省略されます。 |
QrVersion | エンコードするQRコードの正確なバージョンを指定します。1から40までの整数値。指定したデータが必要なバージョンに収まらない場合は、WriterExceptionがスローされます。 |
ErrorCorrectionLevel ですが、QRコードは汚れていたり破損していてもデータを復元できる機能を持っていて、どの程度の誤りを訂正できるか指定できるようです。
L = ~7%、M = ~15%、Q = ~25%、H = ~30%、となっており、レベルが高いほど訂正能力が上がり、コードのサイズが大きくなります。
実行