回答編集履歴

6

誤り訂正

2021/04/09 04:22

投稿

neuromancer
neuromancer

スコア72

test CHANGED
@@ -50,7 +50,7 @@
50
50
 
51
51
  End While
52
52
 
53
- fs.Write(allBytes, 0, SerialPort1.BytesToRead)
53
+ fs.Write(allBytes, 0, allBytes.Length)
54
54
 
55
55
  End Sub
56
56
 

5

誤り訂正

2021/04/09 04:22

投稿

neuromancer
neuromancer

スコア72

test CHANGED
@@ -46,7 +46,7 @@
46
46
 
47
47
  allBytes = allBytes.Concat(buf)
48
48
 
49
- last12Bytes = allBytes.Skip(allBytes.Length - 4).Take(4)
49
+ last12Bytes = allBytes.Skip(allBytes.Length - 12).Take(12)
50
50
 
51
51
  End While
52
52
 

4

誤り訂正

2021/04/09 04:17

投稿

neuromancer
neuromancer

スコア72

test CHANGED
@@ -30,13 +30,9 @@
30
30
 
31
31
  Dim fs As FileStream
32
32
 
33
- Dim SerialPort1 As New SerialPort
34
-
35
33
  Dim last12Bytes(12) As Byte
36
34
 
37
35
  Dim allBytes As Byte() = {}
38
-
39
-
40
36
 
41
37
 
42
38
 

3

codeをvbnetフォーマットに変更

2021/04/09 03:32

投稿

neuromancer
neuromancer

スコア72

test CHANGED
@@ -1,6 +1,6 @@
1
1
  おそらく、pngなのかjpegなのかは問題ではなく、読んだByte配列をファイルに書けば良いので、
2
2
 
3
- ```VB.Net
3
+ ```vbnet
4
4
 
5
5
      'ここに下記コードでデータは取得できそうですが、そこからPNGファイルに変換したいです
6
6
 
@@ -26,7 +26,7 @@
26
26
 
27
27
  上記を削除して、下記参考にデバッグしてみてください。
28
28
 
29
- ```VB.Net
29
+ ```vbnet
30
30
 
31
31
  Dim fs As FileStream
32
32
 

2

ファイル終わりの認識について追記

2021/04/09 03:31

投稿

neuromancer
neuromancer

スコア72

test CHANGED
@@ -16,6 +16,84 @@
16
16
 
17
17
  これで良い気がします。
18
18
 
19
+
20
+
21
+ (追記)
22
+
23
+
24
+
25
+ pngデータの終わりはIENDチャンクというのを認識すれば良いみたいです。
26
+
27
+ 上記を削除して、下記参考にデバッグしてみてください。
28
+
29
+ ```VB.Net
30
+
31
+ Dim fs As FileStream
32
+
33
+ Dim SerialPort1 As New SerialPort
34
+
35
+ Dim last12Bytes(12) As Byte
36
+
37
+ Dim allBytes As Byte() = {}
38
+
39
+
40
+
41
+
42
+
43
+ fs = File.Create("aaa.png")
44
+
45
+ While Not isIEND(last12Bytes)
46
+
47
+ Dim buf(SerialPort1.BytesToRead) As Byte
48
+
49
+ SerialPort1.Read(buf, 0, SerialPort1.BytesToRead)
50
+
51
+ allBytes = allBytes.Concat(buf)
52
+
53
+ last12Bytes = allBytes.Skip(allBytes.Length - 4).Take(4)
54
+
55
+ End While
56
+
57
+ fs.Write(allBytes, 0, SerialPort1.BytesToRead)
58
+
59
+ End Sub
60
+
61
+
62
+
63
+ 'IENDチャンクが来たらファイル終わり
64
+
65
+ '00 00 00 00 "IEND" AE 42 60 82
66
+
67
+ Private Function isIEND(last12Bytes() As Byte) As Boolean
68
+
69
+ Dim iend() As Byte =
70
+
71
+ New Byte() {&H0, &H0, &H0, &H0} _
72
+
73
+ .Concat("IEND".Select(Of Byte)(
74
+
75
+ Function(c)
76
+
77
+ Return Byte.Parse(c)
78
+
79
+ End Function)) _
80
+
81
+ .Concat({&HAE, &H42, &H60, &H82})
82
+
83
+
84
+
85
+ Return last12Bytes.SequenceEqual(iend)
86
+
87
+
88
+
89
+ End Function
90
+
91
+
92
+
93
+ ```
94
+
95
+
96
+
19
97
  ソースの先頭にこれが要るかも。
20
98
 
21
99
  ```

1

不要な行を削除

2021/04/09 03:23

投稿

neuromancer
neuromancer

スコア72

test CHANGED
@@ -7,8 +7,6 @@
7
7
      '画像ファイルに変換できるのなら、別の方法でも可です
8
8
 
9
9
  Dim buf(SerialPort1.BytesToRead) As Byte
10
-
11
- Dim file As File
12
10
 
13
11
  SerialPort1.Read(buf, 0, SerialPort1.BytesToRead)
14
12