ハードウェア開発
アプリケーション開発
このままではボタンを押しても何も動作しません。
動作するように、コーディングを行っていきましょう。
[読み込む(L)] ボタンをダブルクリックします。
下の画像のように表示されたと思います。
Button1.Click イベントの Sub プロシージャに次のように記述します。
※ ' を付けるとコメントアウトされ、その行のコードは実行されません。
' OpenFileDialog1 が表示されて、[開く(O)] ボタンがクリックされたら... If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then ' PictureBox1 に OpenFileDialog1 で選択されたファイルの画像を読み込みます。 PictureBox1.Image = Image.FromFile(OpenFileDialog1.FileName) End If
では早速デバッグしてみましょう。
[読み込む(L)] ボタンをクリックして、[開く] ダイアログが表示され、画像がプログラム内に表示されたら成功です。
※ファイルによってはエラーを吐いたりするかもしれませんが、普段使っているファイルが開ければ問題ありません。
短いテキストならコード上でもいいですが、長いテキストや改行文字が入ると管理が面倒です。
Visual Studio では、初期値をアプリケーションに持たせることができる機能を持っています。
プロジェクトのプロパティを開いて、左のタブの「設定」で編集可能です。
これらのデーターは My.Settings クラスからアクセスできるので、アプリケーションからも容易に利用できます。
My.Settings.foo = "テスト" とするだけで、データーの保存もできるので、保存用のコードを書く必要はありません。
変更させたくないデーターは [リソース] に追加するか、[スコープ] を変更するといいかもしれません。
配列なので [, ] で区切っています。

コア―な部分は、こちらで用意したものをお使いください。
以下のサブプロシージャーは Public Class Form1 と Private Sub Button1_Click の間に入れれば、分りやすいと思います。
※''' がついているのを XML コメント(必須ではありません)と言いますが、これは最後に書いた方がいいかもしれません。
Sub New()
' この呼び出しはデザイナーで必要です。
InitializeComponent()
' InitializeComponent() 呼び出しの後で初期化を追加します。
Dim newImg As Bitmap = New Bitmap(PictureBox1.Size.Width, PictureBox1.Size.Height)
'イメージを適用
PictureBox1.Image = newImg
Dim g As Graphics = Graphics.FromImage(PictureBox1.Image)
g.FillRectangle(Brushes.White, g.ClipBounds)
g.DrawString("イメージのプレビューがここに表示されます", Me.Font, Brushes.Black, New PointF(0, 0))
'エクスペリエンスの向上
g.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality
g.InterpolationMode = Drawing2D.InterpolationMode.NearestNeighbor
End Sub
Button2 のクリックイベントハンドラーと次のソースコードを追加します。
Button1 の Click イベントの後 (End Sub の次の行くらい) に追加しておいてください。
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
' ベースとなるプログラム
Dim Base As String = My.Settings.base_code
Dim __array_4rep As Object() = New Object() {New String() {"/*array_b0*/", "/*array_c0*/"}, New String() {"/*array_b1*/", "/*array_c1*/"}, New String() {"/*array_b2*/", "/*array_c2*/"}, New String() {"/*array_b3*/", "/*array_c3*/"}}
Dim __array_length As Object() = New Object() {New String() {"/*array_b0.lenght*/", "/*array_c0.lenght*/"}, New String() {"/*array_b1.lenght*/", "/*array_c1.lenght*/"}, New String() {"/*array_b2.lenght*/", "/*array_c2.lenght*/"}, New String() {"/*array_b3.lenght*/", "/*array_c3.lenght*/"}}
Dim _img As Bitmap = PictureBox1.Image
Dim ImageSize As Size = New Size(12, PictureBox1.Image.Size.Height)
Base = GetDecData(Base, My.Settings.split_string, _img, __array_4rep(0), ImageSize, Color.FromArgb(0, 0, 0))
'配列の長さを取得
Base = Base.Replace(__array_length(0)(0), ImageSize.Height)
Base = Base.Replace(__array_length(0)(1), ImageSize.Height)
'時間
Base = Base.Replace("/*time.ms*/", "1000")
'置換されないテキストを置換しておく
For count As Integer = 0 To 3
Base = Base.Replace(__array_4rep(count)(0), "")
Base = Base.Replace(__array_4rep(count)(1), "")
Base = Base.Replace(__array_length(count)(0), "0")
Base = Base.Replace(__array_length(count)(1), "0")
Next
' コードを表示
TextBox1.Text = Base
' TextBox1 を選択状態に
TextBox1.Select()
' すべてのテキストを選択
TextBox1.SelectAll()
End Sub
''' <summary>
''' 画像データーを 2 進数にする
''' </summary>
''' <param name="Base">適用先のコード</param>
''' <param name="SplitText">複数データーが存在するときの区切り文字</param>
''' <param name="AnalyzeImage">調べる画像</param>
''' <param name="__array_4rep">置換するテキスト</param>
''' <param name="ImageSize">調べるイメージの最大値</param>
''' <param name="CheckColor">判定する色</param>
''' <returns>2進数にしたテキストデーターを含むコード</returns>
''' <remarks></remarks>
Function GetDecData(ByVal Base As String, ByVal SplitText As String, ByRef AnalyzeImage As Bitmap, ByVal __array_4rep() As String, ByVal ImageSize As Size, ByVal CheckColor As Color) As String
Dim _top As String = "0b"
Dim _ArrayCount As Integer = 0
For i As Integer = 0 To __array_4rep.Length - 1 Step 2
Dim _imgpx_dec() As String = New String() {"", "", ""}
Dim _array As String = ""
Dim _value, _count As Integer
Dim _temp_decvalue As String
If AnalyzeImage IsNot Nothing Then
For _Height As Integer = 0 To AnalyzeImage.Height - 1
If (_Height = ImageSize.Height) Then
Exit For
End If
_value = 0
_count = 0
_temp_decvalue = ""
For _Width As Integer = 0 To AnalyzeImage.Width - 1
If (_Width = ImageSize.Width) Then
Exit For
End If
Dim _found As Boolean = False
'色の判定
Dim AnalyzeColor As Color = AnalyzeImage.GetPixel(_Width, _Height)
If (AnalyzeColor.R = CheckColor.R) And (AnalyzeColor.G = CheckColor.G) And (AnalyzeColor.B = CheckColor.B) Then
_found = True
End If
Dim __count As Integer = _count + 1
If _found Then
Do While (__count > 4)
__count -= 4
Loop
Select Case __count
Case 1
_value += 8
Case 2
_value += 4
Case 3
_value += 2
Case 4
_value += 1
End Select
End If
Dim Program_dec As String = _value
'2進数に変換
Program_dec = Convert.ToString(_value, 2)
'0を0000にする
If (Program_dec = "0") Then
Program_dec = "0000"
End If
'4桁になるように0を挿入していく
While (Program_dec.Length < 4)
Program_dec = "0" & Program_dec.ToString
End While
Select Case _count
Case 11
'2つ目の配列に2進数のデーターを記録
_imgpx_dec(1) &= _top & Program_dec.ToString & "0000"
If (_Height < ImageSize.Height - 1) Then
'最後ではないときに、2つ目の配列に区切りの文字を挿入
_imgpx_dec(1) &= SplitText
End If
_value = 0
Case 7
'1つ目の配列に2進数のデーターを記録
_imgpx_dec(0) &= _top & _temp_decvalue.ToString & Program_dec.ToString
If (_Height < ImageSize.Height - 1) Then
'最後ではないときに、1つ目の配列に区切りの文字を挿入
_imgpx_dec(0) &= SplitText
End If
_value = 0
Case 3
'一時的に2進数にしたテキストを保持
_temp_decvalue = Program_dec
_value = 0
End Select
_count += 1
Next
Next
Else
_array = ""
End If
_array = _imgpx_dec(0)
Base = Base.Replace(__array_4rep(i), _array)
_array = _imgpx_dec(1)
Base = Base.Replace(__array_4rep(i + 1), _array)
_ArrayCount += 1
Next
Return Base
End Function
全部折りたためば、こんな感じになっているはずです。
デバッグして、このような動作をしていれば、完成です。