@@ -21,19 +21,14 @@ const connectButton = document.getElementById('connect');
2121const refreshButton = document . getElementById ( 'refresh' ) ;
2222const startButton = document . getElementById ( 'start' ) ;
2323const saveImageButton = document . getElementById ( 'save-image' ) ;
24+ const filterSelector = document . getElementById ( 'filter-selector' ) ;
2425const canvas = document . getElementById ( 'bitmapCanvas' ) ;
2526const ctx = canvas . getContext ( '2d' ) ;
2627
2728const imageDataTransfomer = new ImageDataTransformer ( ctx ) ;
2829imageDataTransfomer . setStartSequence ( [ 0xfa , 0xce , 0xfe , 0xed ] ) ;
2930imageDataTransfomer . setStopSequence ( [ 0xda , 0xbb , 0xad , 0x00 ] ) ;
3031
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);
3732const connectionHandler = new SerialConnectionHandler ( ) ;
3833
3934
@@ -54,12 +49,20 @@ connectionHandler.onConnect = async () => {
5449 }
5550 imageDataTransfomer . setImageMode ( imageMode ) ;
5651 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+
5758 renderStream ( ) ;
5859} ;
5960
6061connectionHandler . onDisconnect = ( ) => {
61- connectButton . textContent = 'Connect' ;
6262 imageDataTransfomer . reset ( ) ;
63+ connectButton . textContent = 'Connect' ;
64+ filterSelector . disabled = true ;
65+ filterSelector . value = 'none' ;
6366} ;
6467
6568
@@ -122,9 +125,37 @@ saveImageButton.addEventListener('click', () => {
122125 link . remove ( ) ;
123126} ) ;
124127
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+
125154// On page load event, try to connect to the serial port
126155window . addEventListener ( 'load' , async ( ) => {
156+ filterSelector . disabled = true ;
127157 console . log ( '🚀 Page loaded. Trying to connect to serial port...' ) ;
158+
128159 setTimeout ( ( ) => {
129160 connectionHandler . autoConnect ( ) ;
130161 } , 1000 ) ;
0 commit comments