teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

解決したコードを記載

2021/04/11 22:27

投稿

退会済みユーザー
title CHANGED
@@ -1,1 +1,1 @@
1
- VB.NETで制御している装置(オシロ)から画像データを取得したい
1
+ VB.NETで制御している装置(オシロ)から画像データを取得したい(解決しました)
body CHANGED
@@ -35,35 +35,65 @@
35
35
  ```
36
36
 
37
37
 
38
- ### したこと(検索して見つけたコード
38
+ ### 解決したコード
39
+ バイト配列をImageオブジェクトに変換するFunctionを追加しています。
40
+ (Web上から見つけました)
39
41
 
40
- ```VB.NET
42
+ ``` VB.NET
41
- Public Shared Function ReadBinaryData(ByVal st As Stream) As Byte()
43
+ Private Sub hard_cpopy_Click(sender As Object, e As EventArgs) Handles hard_cpopy.Click
44
+ SerialPort1.Open()
45
+ SerialPort1.WriteLine("HARDCOPY:PORT RS232")
46
+ SerialPort1.WriteLine("HARDCOPY:LAYOUT PORTRAIT")
47
+ SerialPort1.WriteLine("HARDCOPY:INKS ON")
48
+ SerialPort1.WriteLine("HARDCOPY:FORMAT TIF")
49
+ SerialPort1.WriteLine("HARDCOPY START")
42
50
 
51
+ Dim img As Byte()
52
+ img = ReadBinaryData(SerialPort1)
53
+
54
+ Dim img2 As Image = ByteArrayToImage(img)
55
+
56
+ img2.Save("hard.tif", System.Drawing.Imaging.ImageFormat.Tiff)
57
+
58
+ SerialPort1.Close()
59
+
60
+ End Sub
61
+
62
+ ' バイト配列をImageオブジェクトに変換
63
+ Public Shared Function ByteArrayToImage(ByVal b As Byte()) As Image
64
+ Dim img As Image = CType(imgconv.ConvertFrom(b), Image)
65
+ Return img
66
+ End Function
67
+
68
+ Public Function ReadBinaryData(st As SerialPort) As Byte()
43
69
  Dim buf(32768) As Byte ' 一時バッファ
44
-
70
+ '無限に待たれても困るので、ReadTimeoutがInfiniteTimeoutならとりあえず10秒に設定
71
+ If st.ReadTimeout = SerialPort.InfiniteTimeout Then
72
+ st.ReadTimeout = 10000
73
+ End If
45
74
  Using ms As New MemoryStream()
46
-
47
75
  While (True)
76
+ Try
48
- ' ストリーから一時バッファに読み込む
77
+ ' アルポから一時バッファに読み込む
49
- Dim read As Integer = st.Read(buf, 0, buf.Length)
78
+ Dim read As Integer = st.Read(buf, 0, buf.Length)
50
-
51
- If read > 0 Then
79
+ If read > 0 Then
52
- ' 一時バッファの内容をメモリ・ストリームに書き込む
80
+ ' 一時バッファの内容をメモリ・ストリームに書き込む
53
- ms.Write(buf, 0, read)
81
+ ms.Write(buf, 0, read)
54
- Else
82
+ Else
83
+ Exit While
84
+ End If
85
+ Catch ex As TimeoutException
86
+ 'タイムアウト処理も入れておく
55
87
  Exit While
56
- End If
88
+ End Try
57
89
  End While
58
-
59
90
  ' メモリ・ストリームの内容をバイト配列に格納
60
91
  Return ms.ToArray()
61
-
62
92
  End Using
63
93
  End Function
64
94
  ```
95
+ 上記のコードで期待するTIFF画像を得ることができました。
96
+ 課題は10秒待たないとTIFFが得られないこと。
97
+ オシロからのTIFFデータの転送終了を知ることが出来れば完璧ですが、とりあえず及第点です。
65
98
 
66
- [別の見つけたHPの記事](https://www.atmarkit.co.jp/ait/articles/0706/07/news139.html)もありましたが、JPEGでなく、今回はPNGです。
67
- 装置の制限でJPEGでの出力はできなです
99
+ 回答ただいた方、ありがとうございました
68
-
69
- よろしくお願いします。