はじめに
Windows 環境動作で画像ファイルから QRコード読み取りをしたい!続
前に Flutter で断念した目的の継続を WPF C# で実現することを目的に試してみた
環境
- Windows 10
- C#
- WPF
- ZXing.Net
あらすじ
WPF では、Bitmap が使えない(正確には使えるけど変換も必要)で世にあるサンプルコードをそのまま使えない
.NET6 で設計開始したので ZXing.NET が対応していないことで五里霧中なコーディングになった
偶然見つけたウェブサイト情報で、Extension が必要なことを知る
もうここまで視界不良では、コードが何をしているか理解が進まないまま結論で終着となった
終結までの手順
1. NuGet から ZXing.Net をインストール
dotnet add package ZXing.Net --version 0.16.9
2. Bitmap 参照解決に パッケージをインストール
WPF で Bitmap を利用するのに必要で、参照解決のガイドからインストールを促される
dotnet add package System.Drawing.Common
3. Extennsion インストール
詳細は、下記サイトを参照
https://qiita.com/Yayoi-t/items/f3e6a076f7c809cf00a1
using Zxing.Net with .Net5 or higher(.Net6)
ZXing.Net.Bindings.SkiaSharp をインストール
dotnet add package ZXing.Net.Bindings.SkiaSharp --version 0.16.14
これで準備は完了!
ここまでが長かった、WinForms だったら、.NET 4.x だったら、もっと楽だった
使い方
目的は、画像ファイルの QR コード読み取りなのでその使用例を紹介
(他の方法は不要なので調査していない)
static public Result ReadQRCodeResult(string filePath) {
Result result = null;
var stream = System.IO.File.Open(filePath, System.IO.FileMode.Open);
using (var skiaImage = SkiaSharp.SKBitmap.Decode(stream)) {
var skiaReader = new ZXing.SkiaSharp.BarcodeReader();
result = skiaReader.Decode(skiaImage);
}
return result;
}
// 呼び出し例
var result = ReadQRCodeResult("testqrcode.png");
if (result != null) {
Debug.WriteLine("読み取りテキスト: " + result.Text);
}
まとめ
C# WPF での作業は久しぶりで手が止まることが多く、それに加えて問題多発で何度挫けそうになったことか、
パッケージの情報をどこから取ってくるのか全くわからない(現在も不明なまま)、ウェブ探索で引っかかる記事を読み解くのに時間ばかりが吸い取られて手も頭も動かない
なんとも苦労した。正直解決できたのは偶然の奇跡だと思っている
だれか教えて、各パッケージのドキュメントはどこにあるの!?
こんなに苦労した .NET6.0 も 2024年11月12日にサポート終了との知らせも…絶望した!