###前提・実現したいこと
Xamarin/Androidにて、QRコードをZXingライブラリを使用して読み込む
モジュールを作成しています。
下記サイトで作成した日本語を設定したQRコードをテストとして使用しています。
http://qr.quel.jp/form_bsc_msg.php
プロジェクト作成時、デフォルトの共有ランタイム有りの場合には
添付ソースにて正常に読み込みが可能でした。
リリース等のため、Androidプロジェクトの共有ランタイムチェックを
外して実行したところ、読み込みが不可能となりました。
(QRCodeReader.decode関数がNullを戻します)
上記を正常に読み込むための方法を模索しております、何卒よろしくお願いいたします。
###該当のソースコード
C#
1using System; 2using System.IO; 3using System.Reflection; 4using System.Collections.Generic; 5using System.Linq; 6using System.Text; 7using System.Threading.Tasks; 8using Xamarin.Forms; 9 10namespace QR3 11{ 12 public partial class MainPage : ContentPage 13 { 14 public MainPage() 15 { 16 InitializeComponent(); 17 } 18 19 private void Button_Clicked(object sender, EventArgs e) 20 { 21 // 埋め込みリソースからデータの読み込み 22 var assembly = typeof(MainPage).GetTypeInfo().Assembly; 23 using (var stream = assembly.GetManifestResourceStream("QR3.Data.jpqr.bmp")) 24 using (var reader = new BinaryReader(stream)) 25 { 26 byte[] pbData = new byte[stream.Length]; 27 reader.Read(pbData, 0, (int)stream.Length); 28 var source = new ZXing.RGBLuminanceSource(pbData, 116, 116); 29 30 // BitmapSource→BinaryBitmap変換 31 var binaryBitmap = new ZXing.BinaryBitmap(new ZXing.Common.HybridBinarizer(source)); 32 33 var dict = new Dictionary<ZXing.DecodeHintType, object>(); 34 //dict.Add(ZXing.DecodeHintType.CHARACTER_SET, "ISO-8859-1"); 35 //dict.Add(ZXing.DecodeHintType.CHARACTER_SET, "utf-8"); 36 //dict.Add(ZXing.DecodeHintType.CHARACTER_SET, "shiftjis"); 37 38 // 共有ランタイム有りの場合 39 // 指定なし → 日本語(読み込み成功) 40 // 共有ランタイムなしの場合 41 // 指定なし → NULL(読み込み失敗) 42 // ISO-8859-1 → 読み込めるが文字化け 43 // utf-8 → 読み込めるが文字化け 44 // shiftjis → NULL(読み込み失敗) 45 46 dict.Add(ZXing.DecodeHintType.TRY_HARDER, true); 47 48 var zx = new ZXing.QrCode.QRCodeReader(); 49 var ret = zx.decode(binaryBitmap, dict); 50 } 51 } 52 } 53}
###試したこと
コメントアウト部分 各種文字コードをHintに登録して試しましたが
上手く動作しませんでした。
添付ソースではPCL部分にてZXingライブラリをリンクしてPCL内でデコード処理などを行っています。
Android側で動作するカスタムレンダラーを作成し、Androidプロジェクト内でZXingをリンクし、
カスタムレンダラー内でデコード処理を完結させた場合も同じ結果となりました。
HintにUTF-8を指定した際の戻り値のバイトデータは下記となります。
0x40, 0x69, 0x3f, 0xa9, 0x67, 0xb8, 0xce, 0xa0, 0xec
0x11, 0xec, 0x11, 0xec, 0x11, 0xec, 0x11, 0xec, 0x11, 0xec
(QRコードデータの文字列は「日本語」です)
###補足情報(言語/FW/ツール等のバージョンなど)
言語 C#
開発環境 VisualStudio2015Community Version 14.0.25431.01 Update 3
Xamarin 4.3.0.795 (aece090)
Xamarin.Android 7.1.0.43 (3a62f1e)
プロジェクト環境
Xamarin.Forms v2.3.3.193
ZXingライブラリ ZXing.Net.Mobile v2.2.9
Android側環境
SONY Xperia Z3 SOL26
Android 5.0.2

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/07 05:32