■82589 / inTopicNo.2) |
Re[1]: QRコードの読取について |
□投稿者/ 魔界の仮面弁士 (1065回)-(2017/01/19(Thu) 11:12:11)
|
2017/01/19(Thu) 11:27:20 編集(投稿者)
■No82583 (夜叉丸 さん) に返信 > ZXing.Net.0.14.0.0.zip をダウンロード > 何かお気づきの点があれば教えてください。 ZXing.Net を使うのは初めてですが、分かる範囲で回答します。
> zxing.wp7.1.dll を参照に追加しています。 .\net何某\zxing.dll ではなく .\wp7.1\zxing.wp7.1.dll を使っているという事は デスクトップアプリケーションではなく、 Windows Phone OS 7.1 向けのアプリケーションでしょうか。 (VS2013 って、WP7.1 SDK に対応しているんでしたっけ?)
> Bitmap bmp = new Bitmap(pbx.Image); pbx というのは、System.Windows.Forms.PictureBox の事でしょうか。
『BMP に描画されているQRコード』とのことでしたが、事前に PictureBox に Bitmap を割り当てているのでしょうか。
もしも Bitmap を割り当てず、Paint イベントや CreateGraphics などで 描画しているだけなら、Image プロパティからは QR コードの 画像情報を得ることは出来ません。
ひとまず、zxing.dll の場合は下記で動作することを確認しています。 zxing.wp7.1.dll ではこの方法が使えません。
private void Form1_Load(object sender, EventArgs e) { pictureBox1.Load("https://upload.wikimedia.org/wikipedia/ja/6/60/Qr_code.png"); }
private void button1_Click(object sender, EventArgs e) { string resultText = null; using (var bmp = new System.Drawing.Bitmap(pictureBox1.Image)) { var reader = new ZXing.BarcodeReader() { AutoRotate = true }; var result = reader.DecodeMultiple(bmp) ?? new ZXing.Result[0]; resultText = string.Join("\r\n", result.Select(r => r.Text)); } MessageBox.Show(resultText); }
> Byte[] dats = mms.GetBuffer(); GetBuffer ではなく ToArray を使いましょう。 データのコピーが発生してしまいますが、その方が確実です。 http://bbs.wankuma.com/index.cgi?mode=al2&namber=30706&KLOG=55
MemoryStream.GetBuffer は、格納されたデータではなく、 そのデータを保持するための作業領域を返しますので、 実際のデータは、その中の一部分だけです。
データ長は Length プロパティで読み出せますが、 データの先頭から始まるとは限りませんし。 (今回は 0 バイト目になるでしょけれども)
データのコピーを伴わせたくない場合には、GetBuffer の代わりに、 TryGetBuffer を用いることができます(要 .NET 4.6 以上)。
この方法なら、バッファー内の何バイト目から何バイト目を得れば 良いのかを、部分配列(ArraySegment<byte>)を通じて得られます。 今回使うことは無いと思いますけれども。
> LuminanceSource source = new RGBLuminanceSource(bmp, bmp.Width, bmp.Height); > RGBLuminanceSource の引数の1番目が byte[] になっているため > bmp が渡せないので byte[] に変換しています。 その割には、Byte[] な dats ではなく、Bitmap な bmp を渡しているような…。
それと、RGBLuminanceSource のコンストラクタ引数の説明を見てみると、 byte[] rgbRawBytes パラメーターが『It supports a byte array with 3 bytes per pixel (RGB24).』 であると書かれていますので、色数情報が不明瞭なビットマップファイルを ヘッダーも含めて渡すのでは駄目なのかもしれません。
|
|