none
C# WinForm で ZXingを使ったバーコードの読み取りをしたいが、エラー RRS feed

  • 質問

  • お世話になります。

    ZXingを使用してバーコードの画像の読み取りをしたいのですが、コンパイルの段階でつまづいています。

       Image img = new Bitmap(pictureBox1.Image);
    
       ImageConverter imgconv = new ImageConverter();
       byte[] bmt = (byte[])imgconv.ConvertTo(img, typeof(byte[]));
    
       // コードの解析
       ZXing.BarcodeReader reader = new ZXing.BarcodeReader();
       ZXing.Result result = reader.Decode(bmt, img.Width, img.Height, ZXing.RGBLuminanceSource.BitmapFormat.RGB24);
                                      ↑ここでエラー
       if (result != null)
       {

    上記のDecodeの部分でエラーになります。メッセージは、

    「エラー CS0012 型 'WriteableBitmap' は、参照されていないアセンブリに定義されています。アセンブリ 'System.Windows, Version=5.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e' に参照を追加する必要があります。」

    環境

    Windows10 VS2010/VS2015 C# WinForm アプリ

    2018年7月2日 6:03

回答

  • 回答ではないのですが、私の環境(Windows 10 x64, Visual Studio 2015, C#, Windows Forms)で再現させることができませんでした。

    行った手順は下記です。

    1.Visual Studio 2015 で 新しいプロジェクトの作成。
    2.[インストール済み]→[テンプレート]→[Visual C#]→[Windows]→[Windows フォーム アプリケーション]を選択
    3.メニューの「プロジェクト」→「NuGet パッケージの管理」。参照タブから、"ZXing.Net" を検索し一番上のものをインストール
    4.フォームにPictureBoxとボタンを配置
    5.配置したボタンをダブルクリックして下記のようなコードを記述

    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                Image img = new Bitmap(pictureBox1.Image);
    
                ImageConverter imgconv = new ImageConverter();
                byte[] bmt = (byte[])imgconv.ConvertTo(img, typeof(byte[]));
    
                // コードの解析
                ZXing.BarcodeReader reader = new ZXing.BarcodeReader();
                ZXing.Result result = reader.Decode(bmt, img.Width, img.Height, ZXing.RGBLuminanceSource.BitmapFormat.RGB24);
                if (result != null)
                {
                    MessageBox.Show("成功");
                }
            }
        }
    }

    上記の手順でコンパイルは成功しました。
    上記とは異なる手順でしょうか?また、プロジェクトの参照や using の設定はどうなっていますでしょうか?
    • 回答としてマーク ferret001 2018年7月2日 23:40
    2018年7月2日 6:50
  • お世話になります。

    インストールがうまくいかないようで、プロジェクトを消して作り直し、

    下記サイトからパッケージマネージャーコンソールにインストールしました。

    https://packages.nuget.org/packages/ZXing.Net/

    PM>  Install-Package ZXing.Net -Version 0.16.4

    それでうまく行きました。

    • 回答としてマーク ferret001 2018年7月2日 23:39
    2018年7月2日 23:39

すべての返信

  • 回答ではないのですが、私の環境(Windows 10 x64, Visual Studio 2015, C#, Windows Forms)で再現させることができませんでした。

    行った手順は下記です。

    1.Visual Studio 2015 で 新しいプロジェクトの作成。
    2.[インストール済み]→[テンプレート]→[Visual C#]→[Windows]→[Windows フォーム アプリケーション]を選択
    3.メニューの「プロジェクト」→「NuGet パッケージの管理」。参照タブから、"ZXing.Net" を検索し一番上のものをインストール
    4.フォームにPictureBoxとボタンを配置
    5.配置したボタンをダブルクリックして下記のようなコードを記述

    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                Image img = new Bitmap(pictureBox1.Image);
    
                ImageConverter imgconv = new ImageConverter();
                byte[] bmt = (byte[])imgconv.ConvertTo(img, typeof(byte[]));
    
                // コードの解析
                ZXing.BarcodeReader reader = new ZXing.BarcodeReader();
                ZXing.Result result = reader.Decode(bmt, img.Width, img.Height, ZXing.RGBLuminanceSource.BitmapFormat.RGB24);
                if (result != null)
                {
                    MessageBox.Show("成功");
                }
            }
        }
    }

    上記の手順でコンパイルは成功しました。
    上記とは異なる手順でしょうか?また、プロジェクトの参照や using の設定はどうなっていますでしょうか?
    • 回答としてマーク ferret001 2018年7月2日 23:40
    2018年7月2日 6:50
  • お世話になります。

    > 3.メニューの「プロジェクト」→「NuGet パッケージの管理」。参照タブから、"ZXing.Net" を検索し一番上のものをインストール

    ここが、うまくいかないようです。検索して出てきた「ZXing.Net」をインストールすると下記のエラーが出ます。

    重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態
    エラー  ソース 'http://packagesource' の追加の試行時に例外 'System.AggregateException' がスローされました。すべてのオンライン パッケージ ソースが利用できることを確認してください。   0 

    VS2010でも試しましたが、
    ZXing 0.16.4 インストールに失敗し、「'ZXing.Net' にはすでに 'NETStandard.Library' に対して定義された依存関係があります。」
    • 編集済み ferret001 2018年7月2日 23:28 修正
    2018年7月2日 7:18
  • お世話になります。

    インストールがうまくいかないようで、プロジェクトを消して作り直し、

    下記サイトからパッケージマネージャーコンソールにインストールしました。

    https://packages.nuget.org/packages/ZXing.Net/

    PM>  Install-Package ZXing.Net -Version 0.16.4

    それでうまく行きました。

    • 回答としてマーク ferret001 2018年7月2日 23:39
    2018年7月2日 23:39