@@ -16,21 +16,19 @@ public partial class Form1 : Form
1616 {
1717 enum TransformColorFormats
1818 {
19- BW1BppH ,
20- BW1BppV ,
19+ Mono_1bpp_H ,
20+ Mono_1bpp_V ,
2121 //BW8Bpp,
22- RGB332 ,
23- //RGB444 ,
24- RGB565 ,
22+ RGB_332 ,
23+ RGB_444 ,
24+ RGB_565 ,
2525 }
26-
27- private Image OriginalImage ;
26+
2827 private BackgroundWorker bgWork ;
2928
3029 public Form1 ( )
3130 {
3231 InitializeComponent ( ) ;
33- btn_Convert . Enabled = false ;
3432
3533 //selBox_Format.DataSource = Enum.GetValues(typeof(PixelFormat));
3634 selBox_Format . DataSource = Enum . GetValues ( typeof ( TransformColorFormats ) ) ;
@@ -56,18 +54,16 @@ private void Btn_open_Click(object sender, EventArgs e)
5654 {
5755 try
5856 {
59- OriginalImage = Image . FromStream ( openFile . OpenFile ( ) ) ;
60- imageBox . Image = OriginalImage ;
57+ imageBox . Image = Image . FromStream ( openFile . OpenFile ( ) ) ;
6158 txt_imgSize . Text = string . Format (
6259 "{0}\n {1}" ,
6360 openFile . SafeFileName ,
64- OriginalImage . PixelFormat . ToString ( )
61+ imageBox . Image . PixelFormat . ToString ( )
6562 ) ;
66- num_Width . Value = OriginalImage . Width ;
67- num_Height . Value = OriginalImage . Height ;
63+ num_Width . Value = imageBox . Image . Width ;
64+ num_Height . Value = imageBox . Image . Height ;
6865
6966 tabBox . SelectedIndex = 0 ; // First tab (Image)
70- btn_Convert . Enabled = true ;
7167 }
7268 catch ( Exception ex )
7369 {
@@ -154,15 +150,15 @@ private String CodeFromImage_1bpp(Image image, bool horisontal = false)
154150
155151 if ( bitInBlock == 0 )
156152 {
157- result += "0x" + ColorByte . ToString ( "X2" ) + ", " ;
158- x_step ++ ;
159153 if ( x_step == 16 )
160154 {
161155 x_step = 0 ;
162156 result += Environment . NewLine + "\t " ;
163157 }
158+ result += "0x" + ColorByte . ToString ( "X2" ) + ", " ;
164159 ColorByte = 0 ;
165160 bitInBlock = 7 ;
161+ x_step ++ ;
166162 }
167163 else
168164 bitInBlock -- ;
@@ -195,11 +191,12 @@ private string CodeFromImage(TransformColorFormats format)
195191
196192 switch ( format )
197193 {
198- case TransformColorFormats . RGB332 :
194+ case TransformColorFormats . RGB_332 :
199195 result . Append ( "uint8_t" ) ;
200196 codeFormat = "0x{0:x2}, " ;
201197 break ;
202- case TransformColorFormats . RGB565 :
198+ case TransformColorFormats . RGB_444 :
199+ case TransformColorFormats . RGB_565 :
203200 result . Append ( "uint16_t" ) ;
204201 codeFormat = "0x{0:x4}, " ;
205202 break ;
@@ -223,18 +220,26 @@ private string CodeFromImage(TransformColorFormats format)
223220
224221 switch ( format )
225222 {
226- case TransformColorFormats . RGB332 :
223+ case TransformColorFormats . RGB_332 :
227224 ColorByte =
228- ( pixelColor . R & 0xE0 ) |
225+ ( pixelColor . R & 0xE0 ) | // 0xE0 = 1110 0000
229226 ( pixelColor . G & 0xE0 ) >> 3 |
230- ( pixelColor . B & 0xC0 ) >> 6 ;
227+ ( pixelColor . B & 0xC0 ) >> 6 ; // 0xC0 = 1100 0000
231228 break ;
232- case TransformColorFormats . RGB565 :
229+ case TransformColorFormats . RGB_444 :
233230 // byte = 16 bit per color
234231 // RRRR RGGG GGGB BBBB
235232 ColorByte =
236- ( pixelColor . R & 0xF8 ) << 8 |
237- ( pixelColor . G & 0xFC ) << 3 |
233+ ( pixelColor . R & 0xF0 ) << 4 | // 0xF0 = 1111 0000
234+ ( pixelColor . G & 0xF0 ) |
235+ ( pixelColor . B & 0xF0 ) >> 4 ;
236+ break ;
237+ case TransformColorFormats . RGB_565 :
238+ // byte = 16 bit per color
239+ // RRRR RGGG GGGB BBBB
240+ ColorByte =
241+ ( pixelColor . R & 0xF8 ) << 8 | // 0xF8 = 1111 1000
242+ ( pixelColor . G & 0xFC ) << 3 | // 0xFC = 1111 1100
238243 ( pixelColor . B & 0xF8 ) >> 3 ;
239244 break ;
240245 }
@@ -264,27 +269,24 @@ private void ImageToCode(object sender, DoWorkEventArgs e)
264269 {
265270 switch ( e . Argument )
266271 {
267- case TransformColorFormats . BW1BppH :
268- e . Result = CodeFromImage_1bpp ( OriginalImage , true ) ;
272+ case TransformColorFormats . Mono_1bpp_H :
273+ e . Result = CodeFromImage_1bpp ( imageBox . Image , true ) ;
269274 break ;
270- case TransformColorFormats . BW1BppV :
271- e . Result = CodeFromImage_1bpp ( OriginalImage , false ) ;
275+ case TransformColorFormats . Mono_1bpp_V :
276+ e . Result = CodeFromImage_1bpp ( imageBox . Image , false ) ;
272277 break ;
273- case TransformColorFormats . RGB332 :
274- case TransformColorFormats . RGB565 :
278+ case TransformColorFormats . RGB_332 :
279+ case TransformColorFormats . RGB_444 :
280+ case TransformColorFormats . RGB_565 :
275281 e . Result = CodeFromImage ( ( TransformColorFormats ) e . Argument ) ;
276- //e.Result = GenDrawCode_RGB332(OriginalImage);
277282 break ;
278- //case TransformColorFormats.RGB565:
279- //e.Result = GenDrawCode_RGB565(OriginalImage);
280- //break;
281283 default :
282284 MessageBox . Show ( "Sorry, unsupported." ) ;
283285 break ;
284286 }
285287 }
286288
287- #region Code2Image
289+ #region Code2Image
288290
289291 private void CodeToImage ( object sender , DoWorkEventArgs e )
290292 {
@@ -300,6 +302,25 @@ private void CodeToImage(object sender, DoWorkEventArgs e)
300302 Code = GeneratedCode . Text ;
301303 } ) ) ;
302304
305+ if ( Width <= 0 || Height <= 0 )
306+ {
307+ MessageBox . Show ( "Error:\n The size of image can't be zero!" ) ;
308+ return ;
309+ }
310+
311+ // Some additional checks
312+ if ( format == TransformColorFormats . Mono_1bpp_H && Width % 8 != 0 )
313+ {
314+ MessageBox . Show ( "Error:\n Width has to be multiple 8!" ) ;
315+ return ;
316+ }
317+
318+ if ( format == TransformColorFormats . Mono_1bpp_V && Height % 8 != 0 )
319+ {
320+ MessageBox . Show ( "Error:\n Height has to be multiple 8!" ) ;
321+ return ;
322+ }
323+
303324 Bitmap result = new Bitmap ( Width , Height ) ;
304325
305326 int pixelsCurrent = 0 ;
@@ -312,40 +333,44 @@ private void CodeToImage(object sender, DoWorkEventArgs e)
312333 string regex = "" ;
313334 switch ( format )
314335 {
315- case TransformColorFormats . BW1BppH :
316- case TransformColorFormats . BW1BppV :
317- case TransformColorFormats . RGB332 :
336+ case TransformColorFormats . Mono_1bpp_H :
337+ case TransformColorFormats . Mono_1bpp_V :
338+ case TransformColorFormats . RGB_332 :
318339 regex = @"0x([0-9a-fA-F]{2})," ; // 0xAB (one byte)
319340 break ;
320- case TransformColorFormats . RGB565 :
341+ case TransformColorFormats . RGB_444 :
342+ case TransformColorFormats . RGB_565 :
321343 regex = @"0x([0-9a-fA-F]{4})," ; // 0xABCD (two bytes)
322344 break ;
323345 }
324-
346+
325347 foreach ( Match m in Regex . Matches ( Code , regex ) )
326348 {
327349 pixelColor = int . Parse ( m . Groups [ 1 ] . Value , System . Globalization . NumberStyles . HexNumber ) ;
328350
329351 switch ( format )
330352 {
331- case TransformColorFormats . BW1BppH :
353+ case TransformColorFormats . Mono_1bpp_H :
332354 for ( int offset = 7 ; offset >= 0 ; offset -- )
333355 {
334356 result . SetPixel ( x , y , ( ( pixelColor & ( 1 << offset ) ) > 0 ) ? Color . Black : Color . White ) ;
335357 x ++ ;
336358 }
337359 x -- ;
338360 break ;
339- case TransformColorFormats . BW1BppV :
361+ case TransformColorFormats . Mono_1bpp_V :
340362 for ( int offset = 7 ; offset >= 0 ; offset -- )
341363 {
342364 result . SetPixel ( x , y + ( - offset + 7 ) , ( ( pixelColor & ( 1 << offset ) ) > 0 ) ? Color . Black : Color . White ) ;
343365 }
344366 break ;
345- case TransformColorFormats . RGB332 : // RRRG GGBB
367+ case TransformColorFormats . RGB_332 : // RRRG GGBB
346368 result . SetPixel ( x , y , color_from332 ( pixelColor ) ) ;
347369 break ;
348- case TransformColorFormats . RGB565 : // RRRR RGGG GGGB BBBB
370+ case TransformColorFormats . RGB_444 : // 0000 RRRR GGGG BBBB
371+ result . SetPixel ( x , y , color_from444 ( pixelColor ) ) ;
372+ break ;
373+ case TransformColorFormats . RGB_565 : // RRRR RGGG GGGB BBBB
349374 result . SetPixel ( x , y , color_from556 ( pixelColor ) ) ;
350375 break ;
351376 }
@@ -354,7 +379,7 @@ private void CodeToImage(object sender, DoWorkEventArgs e)
354379 if ( x == Width )
355380 {
356381 x = 0 ;
357- if ( format == TransformColorFormats . BW1BppV )
382+ if ( format == TransformColorFormats . Mono_1bpp_V )
358383 y += 8 ;
359384 else
360385 y += 1 ;
@@ -409,6 +434,12 @@ private void Btn_Convert_Click(object sender, EventArgs e)
409434 {
410435 default :
411436 case 0 : // Image -> Code
437+ if ( imageBox . Image . Width == 0 || imageBox . Image . Height == 0 )
438+ {
439+ MessageBox . Show ( "Error!\n No image loaded or unsupported image format." ) ;
440+ btn_Convert . Enabled = true ;
441+ return ;
442+ }
412443 bgWork = new BackgroundWorker ( ) ;
413444 bgWork . WorkerReportsProgress = true ;
414445 bgWork . DoWork += new DoWorkEventHandler ( ImageToCode ) ;
@@ -417,13 +448,18 @@ private void Btn_Convert_Click(object sender, EventArgs e)
417448 bgWork . RunWorkerAsync ( selBox_Format . SelectedItem ) ;
418449 break ;
419450 case 1 : // Code -> Image
451+ if ( string . IsNullOrWhiteSpace ( GeneratedCode . Text ) )
452+ {
453+ MessageBox . Show ( "Error!\n Enter some code in Hex format (0x1234) devided by commas." ) ;
454+ btn_Convert . Enabled = true ;
455+ return ;
456+ }
420457 bgWork = new BackgroundWorker ( ) ;
421458 bgWork . WorkerReportsProgress = true ;
422459 bgWork . DoWork += new DoWorkEventHandler ( CodeToImage ) ;
423460 bgWork . ProgressChanged += new ProgressChangedEventHandler ( BgConvertProgress ) ;
424461 bgWork . RunWorkerCompleted += new RunWorkerCompletedEventHandler ( ConvertDone ) ;
425462 bgWork . RunWorkerAsync ( selBox_Format . SelectedItem ) ;
426-
427463 break ;
428464 }
429465
0 commit comments