C#WPFで画像ファイルからQRコード読み取り

はじめに

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日にサポート終了との知らせも…絶望した!

タイトルとURLをコピーしました