@@ -21,19 +21,14 @@ const connectButton = document.getElementById('connect');
21
21
const refreshButton = document . getElementById ( 'refresh' ) ;
22
22
const startButton = document . getElementById ( 'start' ) ;
23
23
const saveImageButton = document . getElementById ( 'save-image' ) ;
24
+ const filterSelector = document . getElementById ( 'filter-selector' ) ;
24
25
const canvas = document . getElementById ( 'bitmapCanvas' ) ;
25
26
const ctx = canvas . getContext ( '2d' ) ;
26
27
27
28
const imageDataTransfomer = new ImageDataTransformer ( ctx ) ;
28
29
imageDataTransfomer . setStartSequence ( [ 0xfa , 0xce , 0xfe , 0xed ] ) ;
29
30
imageDataTransfomer . setStopSequence ( [ 0xda , 0xbb , 0xad , 0x00 ] ) ;
30
31
31
- // 🐣 Uncomment one of the following lines to apply a filter to the image data
32
- // imageDataTransfomer.filter = new GrayScaleFilter();
33
- // imageDataTransfomer.filter = new BlackAndWhiteFilter();
34
- // imageDataTransfomer.filter = new SepiaColorFilter();
35
- // imageDataTransfomer.filter = new PixelateFilter(8);
36
- // imageDataTransfomer.filter = new BlurFilter(8);
37
32
const connectionHandler = new SerialConnectionHandler ( ) ;
38
33
39
34
@@ -54,12 +49,20 @@ connectionHandler.onConnect = async () => {
54
49
}
55
50
imageDataTransfomer . setImageMode ( imageMode ) ;
56
51
imageDataTransfomer . setResolution ( imageResolution . width , imageResolution . height ) ;
52
+
53
+ // Filters are only available for color images
54
+ if ( imageMode !== 'GRAYSCALE' ) {
55
+ filterSelector . disabled = false ;
56
+ }
57
+
57
58
renderStream ( ) ;
58
59
} ;
59
60
60
61
connectionHandler . onDisconnect = ( ) => {
61
- connectButton . textContent = 'Connect' ;
62
62
imageDataTransfomer . reset ( ) ;
63
+ connectButton . textContent = 'Connect' ;
64
+ filterSelector . disabled = true ;
65
+ filterSelector . value = 'none' ;
63
66
} ;
64
67
65
68
@@ -122,9 +125,37 @@ saveImageButton.addEventListener('click', () => {
122
125
link . remove ( ) ;
123
126
} ) ;
124
127
128
+ filterSelector . addEventListener ( 'change' , ( ) => {
129
+ const filter = filterSelector . value ;
130
+ switch ( filter ) {
131
+ case 'none' :
132
+ imageDataTransfomer . filter = null ;
133
+ break ;
134
+ case 'gray-scale' :
135
+ imageDataTransfomer . filter = new GrayScaleFilter ( ) ;
136
+ break ;
137
+ case 'black-and-white' :
138
+ imageDataTransfomer . filter = new BlackAndWhiteFilter ( ) ;
139
+ break ;
140
+ case 'sepia' :
141
+ imageDataTransfomer . filter = new SepiaColorFilter ( ) ;
142
+ break ;
143
+ case 'pixelate' :
144
+ imageDataTransfomer . filter = new PixelateFilter ( 8 ) ;
145
+ break ;
146
+ case 'blur' :
147
+ imageDataTransfomer . filter = new BlurFilter ( 8 ) ;
148
+ break ;
149
+ default :
150
+ imageDataTransfomer . filter = null ;
151
+ }
152
+ } ) ;
153
+
125
154
// On page load event, try to connect to the serial port
126
155
window . addEventListener ( 'load' , async ( ) => {
156
+ filterSelector . disabled = true ;
127
157
console . log ( '🚀 Page loaded. Trying to connect to serial port...' ) ;
158
+
128
159
setTimeout ( ( ) => {
129
160
connectionHandler . autoConnect ( ) ;
130
161
} , 1000 ) ;
0 commit comments