質問編集履歴
1
解決したコードを記載
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
|
-
|
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
|
-
|
78
|
+
Dim read As Integer = st.Read(buf, 0, buf.Length)
|
50
|
-
|
51
|
-
|
79
|
+
If read > 0 Then
|
52
|
-
|
80
|
+
' 一時バッファの内容をメモリ・ストリームに書き込む
|
53
|
-
|
81
|
+
ms.Write(buf, 0, read)
|
54
|
-
|
82
|
+
Else
|
83
|
+
Exit While
|
84
|
+
End If
|
85
|
+
Catch ex As TimeoutException
|
86
|
+
'タイムアウト処理も入れておく
|
55
87
|
Exit While
|
56
|
-
End
|
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
|
-
|
99
|
+
回答いただいた方、ありがとうございました。
|
68
|
-
|
69
|
-
よろしくお願いします。
|