C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: Zxing.net C#サンプルのVB変換


(過去ログ 127 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■75500 / inTopicNo.1)  Zxing.net C#サンプルのVB変換
  
□投稿者/ やっさん (1回)-(2015/03/31(Tue) 16:34:01)
やっさん さんの Web サイト

分類:[VB.NET/VB2005 以降] 

環境:VB2008

お世話になります。

Zxing.netをVBから利用しようと奮闘しているのですが。

Zxing.netのサンプルであるWindowsFormsDemoFormを参考に、複数個のQRコードを含むデコードを
変換しようと思ったのですが、いるのですが。

List<BarcodeFormat> { BarcodeFormat.QR_CODE }など、勉強不足で変換できない状況です。

虫のいい話ですが、以下の部分をVB.netに変換していただけないでしょうか?

お手数をおかけしますが、宜しくお願い申しあげます。

private void btnStartDecoding_Click(object sender, EventArgs e)
      {
         var fileName = txtBarcodeImageFile.Text;
         if (!File.Exists(fileName))
         {
            MessageBox.Show(this, String.Format("File not found: {0}", fileName), "Error", MessageBoxButtons.OK,
                            MessageBoxIcon.Error);
            return;
         }

         using (var bitmap = (Bitmap)Bitmap.FromFile(fileName))
         {
            if (TryOnlyMultipleQRCodes)
               Decode(bitmap, TryMultipleBarcodes, new List<BarcodeFormat> { BarcodeFormat.QR_CODE });
            else
               Decode(bitmap, TryMultipleBarcodes, null);
         }
      }

      private void Decode(Bitmap image, bool tryMultipleBarcodes, IList<BarcodeFormat> possibleFormats)
      {
         resultPoints.Clear();
         lastResults.Clear();
         txtContent.Text = String.Empty;

         var timerStart = DateTime.Now.Ticks;
         Result[] results = null;
         barcodeReader.Options.PossibleFormats = possibleFormats;
         if (tryMultipleBarcodes)
            results = barcodeReader.DecodeMultiple(image);
         else
         {
            var result = barcodeReader.Decode(image);
            if (result != null)
            {
               results = new[] {result};
            }
         }
         var timerStop = DateTime.Now.Ticks;

         if (results == null)
         {
            txtContent.Text = "No barcode recognized";
         }
         labDuration.Text = new TimeSpan(timerStop - timerStart).Milliseconds.ToString("0 ms");

         if (results != null)
         {
            foreach (var result in results)
            {
               if (result.ResultPoints.Length > 0)
               {
                  var rect = new Rectangle((int) result.ResultPoints[0].X, (int) result.ResultPoints[0].Y, 1, 1);
                  foreach (var point in result.ResultPoints)
                  {
                     if (point.X < rect.Left)
                        rect = new Rectangle((int) point.X, rect.Y, rect.Width + rect.X - (int) point.X, rect.Height);
                     if (point.X > rect.Right)
                        rect = new Rectangle(rect.X, rect.Y, rect.Width + (int) point.X - rect.X, rect.Height);
                     if (point.Y < rect.Top)
                        rect = new Rectangle(rect.X, (int) point.Y, rect.Width, rect.Height + rect.Y - (int) point.Y);
                     if (point.Y > rect.Bottom)
                        rect = new Rectangle(rect.X, rect.Y, rect.Width, rect.Height + (int) point.Y - rect.Y);
                  }
                  using (var g = picBarcode.CreateGraphics())
                  {
                     g.DrawRectangle(Pens.Green, rect);
                  }
               }
            }
         }
      }



引用返信 編集キー/
■75503 / inTopicNo.2)  Re[1]: Zxing.net C#サンプルのVB変換
□投稿者/ WebSurfer (535回)-(2015/03/31(Tue) 17:11:38)
No75500 (やっさん さん) に返信

変換サービスがあるので紹介しておきます。

Convert Code
http://converter.telerik.com/

Convert C# to VB.NET
http://www.developerfusion.com/tools/convert/csharp-to-vb/

引用返信 編集キー/
■75504 / inTopicNo.3)  Re[1]: Zxing.net C#サンプルのVB変換
□投稿者/ 魔界の仮面弁士 (273回)-(2015/03/31(Tue) 17:31:57)
No75500 (やっさん さん) に返信
> 環境:VB2008

使った事が無い上に、掲示板に直書きなので、
細かいミスとかは御容赦を:



Private Sub btnStartDecoding_Click(sender As Object, e As EventArgs ) Handles btnStartDecoding.Click
  Dim fileName = txtBarcodeImageFile.Text
  If Not File.Exists(fileName)
       MessageBox.Show(Me, String.Format("File not found: {0}", fileName), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
       Return
  End If

  Using bmp = DirectCast(Bitmap.FromFile(fileName), Bitmap)
      If (TryOnlyMultipleQRCodes)
           'Decode(bmp, TryMultipleBarcodes, New List(Of BarcodeFormat)() from { BarcodeFormat.QR_CODE })

           Dim hoge As New List(Of BarcodeFormat)()
           hoge.Add(BarcodeFormat.QR_CODE)
           Decode(bmp, TryMultipleBarcodes, hoge)
      Else
           Decode(bmp, TryMultipleBarcodes, Nothing)
      End If
  End Using
End Sub

Private Sub Decode(image As Bitmap , tryMultipleBarcodes As Boolean, possibleFormats As IList(Of BarcodeFormat) )
   resultPoints.Clear()
   lastResults.Clear()
   txtContent.Text = String.Empty

   Dim timerStart = DateTime.Now.Ticks
   Dim results() As Result = Nothing
   barcodeReader.Options.PossibleFormats = possibleFormats
   If (tryMultipleBarcodes)
      results = barcodeReader.DecodeMultiple(image)
   Else
      Dim result = barcodeReader.Decode(image)
      If result Is Not Nothing Then
          'ここ少々自信なし
          ReDim results(0)
          results(0) = result
      End If
   End If
   Dim timerStop = DateTime.Now.Ticks

   If (results Is Nothing) txtContent.Text = "No barcode recognized"
   labDuration.Text = New TimeSpan(timerStop - timerStart).Milliseconds.ToString("0 ms")
   If (results IsNot Nothing)
      For Each result In results
         If (result.ResultPoints.Length > 0)
            Dim rect = New Rectangle(CInt(result.ResultPoints(0).X), CInt(result.ResultPoints(0).Y), 1, 1)
            For Each point In result.ResultPoints
               If (point.X < rect.Left) rect = New Rectangle(CInt(point.X), rect.Y, rect.Width + rect.X - CInt(point.X), rect.Height)
               if (point.X > rect.Right) rect = New Rectangle(rect.X, rect.Y, rect.Width + CInt(point.X) - rect.X, rect.Height)
               if (point.Y < rect.Top) rect = New Rectangle(rect.X, CInt(point.Y), rect.Width, rect.Height + rect.Y - CInt(point.Y))
               if (point.Y > rect.Bottom) rect = New Rectangle(rect.X, rect.Y, rect.Width, rect.Height + CInt(point.Y) - rect.Y)
            Next
            Using g = picBarcode.CreateGraphics()
               g.DrawRectangle(Pens.Green, rect);
            End Using
         End If
      Next
   End If
End Sub

引用返信 編集キー/
■75520 / inTopicNo.4)  Re[2]: Zxing.net C#サンプルのVB変換
□投稿者/ やっさん (2回)-(2015/04/01(Wed) 17:21:21)
やっさん さんの Web サイト
No75503 (WebSurfer さん) に返信
> ■No75500 (やっさん さん) に返信
>
> 変換サービスがあるので紹介しておきます。
>
> Convert Code
> http://converter.telerik.com/
>
> Convert C# to VB.NET
> http://www.developerfusion.com/tools/convert/csharp-to-vb/
>

WebSurferさん、有意義な情報ありがとうございます。

実際に処理してみましたが、一部だめみたいで。
その部分が理解できていない部分でした。

今後の参考にしてみます。

引用返信 編集キー/
■75521 / inTopicNo.5)  Re[2]: Zxing.net C#サンプルのVB変換
□投稿者/ やっさん (3回)-(2015/04/01(Wed) 17:24:10)
やっさん さんの Web サイト
No75504 (魔界の仮面弁士 さん) に返信
> ■No75500 (やっさん さん) に返信
>>環境:VB2008
>
> 使った事が無い上に、掲示板に直書きなので、
> 細かいミスとかは御容赦を:
>
>
>

魔界の仮面弁士さん、変換ソースありがとうございます。

コピペして確認していますが、何点かエラーチェックにかかっています。

少し自分で内容を検討してみて、不明な点があれば再度質問したいと思います。

ありがとうございました。

引用返信 編集キー/
■75522 / inTopicNo.6)  Re[3]: Zxing.net C#サンプルのVB変換
□投稿者/ 魔界の仮面弁士 (275回)-(2015/04/01(Wed) 17:37:54)
No75521 (やっさん さん) に返信
> コピペして確認していますが、何点かエラーチェックにかかっています。

とりあえず見つけた範囲のミス:

誤: If 条件 x = newValue
正: If 条件 Then x = newValue

>> If (results Is Nothing) txtContent.Text = "No barcode recognized"
>> if (point.X > rect.Right) rect = New Rectangle(rect.X, rect.Y, rect.Width + CInt(point.X) - rect.X, rect.Height)



※ 単一行構文の時は、Then を省略できない
 https://msdn.microsoft.com/ja-jp/library/752y8abs.aspx
引用返信 編集キー/
■75529 / inTopicNo.7)  Re[4]: Zxing.net C#サンプルのVB変換
□投稿者/ やっさん (4回)-(2015/04/02(Thu) 17:21:35)
やっさん さんの Web サイト
No75522 (魔界の仮面弁士 さん) に返信
> ■No75521 (やっさん さん) に返信
>>コピペして確認していますが、何点かエラーチェックにかかっています。
>
> とりあえず見つけた範囲のミス:
>
> 誤: If 条件 x = newValue
> 正: If 条件 Then x = newValue
>
> >> If (results Is Nothing) txtContent.Text = "No barcode recognized"
> >> if (point.X > rect.Right) rect = New Rectangle(rect.X, rect.Y, rect.Width + CInt(point.X) - rect.X, rect.Height)
>
>
>
> ※ 単一行構文の時は、Then を省略できない
>  https://msdn.microsoft.com/ja-jp/library/752y8abs.aspx

魔界の仮面弁士 さん、ご丁寧にありがとうございます。

if の分は修正し、問題なく動くようになりました。が・・・

C#のデモ版がVS2010用なので複数のQRコードも取得できるのですが、この分を2008で実行すると1つのQRコードしか取得できないので、変換部分以外に問題がありそうなので、そこを調査中です。

変換はOKになりましたので、解決にします。ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -