DOBON.NET DOBON.NETプログラミング掲示板過去ログ

QRコードの作成

  • 題名: QRコードの作成
  • 著者: トマトスープ
  • 日時: 2012/01/27 19:24:21
  • ID: 29697
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
環境/言語:[OS:XP 言語:VB.NET]
分類:[.NET]

お世話になっております。

今回、QRコードの作成に挑戦しているのですがエラーがでてしまい困っております。

まずForm1からの呼び出しのコードです。

PictureBox1.Image = QRCodeUtil.Encode(txtData:=1111111111, encMode:=ThoughtWorks.QRCode.Codec.QRCodeEncoder.ENCODE_MODE.NUMERIC, errCorrect:=ThoughtWorks.QRCode.Codec.QRCodeEncoder.ERROR_CORRECTION.L _
, scale:=2, version:=40)

そしてクラス側のコードです。
Public Shared Function Encode( _
ByVal txtData As String, _
ByVal encMode As QRCodeEncoder.ENCODE_MODE, _
ByVal errCorrect As QRCodeEncoder.ERROR_CORRECTION, _
ByVal scale As Integer, _
ByVal version As Integer, _
ByVal encoding As System.Text.Encoding _
) As Image

Dim errMsg As String = Nothing
Dim qrEnc As QRCodeEncoder = Nothing
Dim img As Image = Nothing

'[QRコードに格納する情報量を決める型番]
' 1〜40の範囲外はNGとする。
If version < 1 OrElse version > 40 Then
errMsg = String.Format( _
"Versionが範囲外[1〜40]です。値:[{0}]", version)
Throw New ArgumentOutOfRangeException( _
"Encode#version", errMsg)
End If

qrEnc = New QRCodeEncoder()

'「情報の種類」を設定
qrEnc.QRCodeEncodeMode = encMode

'「誤り訂正能力」を設定
qrEnc.QRCodeErrorCorrect = errCorrect

' 数値が大きい程、画像のサイズは大きくなる。
qrEnc.QRCodeScale = scale

'「QRコードに格納する情報量を決める型番」を設定
' 1から40までの整数を指定
qrEnc.QRCodeVersion = version

img = qrEnc.Encode(txtData, encoding)←エラー!
Return img
End Function

エラー内容は「インデックスが配列の境界外です。」と帰ってきます。
原因は調べているのですがわからず困っております。

参考URL:http://zebratch.blog.so-net.ne.jp/archive/200906-1

何卒よろしくお願いします。
2012/01/28(Sat) 13:18:09 編集(投稿者)

■No29697に返信(トマトスープさんの記事)
「インデックスが配列の境界外です。」というメッセージは発生し
た例外に配列が関与していることを示すものです。しかしエラーと
なる場所はQRCodeEncoder.Encodeメソッドを呼ぶところです。配列
が見当たりません。QRCodeEncoder.Encodeメソッドの内部で配列が
使用されていて、そこで例外が発生しているのですかね。

エラーとなる原因は、QRCodeEncoderクラスの実装、QRCodeEncoder
オブジェクトの状態、QRCodeEncoder.Encodeメソッドへの入力値と
いったものが考えられます。なんでしょうね。私の環境では、ご掲
示いただいたコードで例外は発生しませんでした。

Dim encoder As New QRCodeEncoder()
Dim img As Image = encoder.Encode("a")
If (img IsNot Nothing) Then
    img.Dispose()
End If

上記のコードでも例外は発生しますか?
もりお様

ご回答ありがとうございます。
早速試してみました!

Dim encoder As New QRCodeEncoder()
Dim img As Image = encoder.Encode("a") ←同じエラーが発生
PictureBox1.Image = img
If (img IsNot Nothing) Then
img.Dispose()
End If

同じエラーが発生してしまいました。
もりお様の環境はVS2008なのでしょうか?
■No29702に返信(トマトスープさんの記事)
はい、Visual Studio 2008で動作を確認しました。トマトスープさんの
環境もVisual Studio 2008ですか?

エラーが発生してしまいましたか。そうですか。QRCodeEncoderオブジェ
クトの状態を既定のものにして、引数をより単純なものにしたとしても
エラーが発生するとなると、エラーの原因はQRCodeEncoderクラスの実装
にある可能性が高いのかなと、そのように思われますが、さて、どうす
ればよいのでしょうね。リンク先でダウンロードできるQRCodeのライブ
ラリにはサンプルアプリケーションが同梱されています。そのサンプル
アプリケーションは動作しますか?

Open Source QRCode Library - CodeProject&#174;
http://www.codeproject.com/Articles/20574/Open-Source-QRCode-Library
もりお様

返信遅くなり申し訳ないです。

いろいろと調べておりました所このようなページを発見致しました!
http://www.atmarkit.co.jp/fdotnet/dotnettips/884qrcode/qrcode.html
こちらのリンク先の下のほうに行きますとあるコードを追加しないといけない
とのことだったので追加したらエラーが解消されました。

原因としてはVisualStudio2008で開いた際に
古いVisualStudioで開発されたためコードの変換が発生しました。
これが原因だと思われます。

色々とアドバイスしていただき大変助かりました。
また何かありましたらよろしくお願いします。
  • 題名: Re[5]: QRコードの作成
  • 著者: トマトスープ
  • 日時: 2012/01/31 17:04:45
  • ID: 29726
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
解決済みです。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板