@@ -47,8 +47,7 @@ export default function Pixel2CPP() {
4747 const [ primary , setPrimary ] = useState ( black ( ) ) ;
4848 const [ secondary , setSecondary ] = useState ( white ( ) ) ;
4949 const [ name , setName ] = useState ( "sprite" ) ;
50- const [ backgroundColor , setBackgroundColor ] = useState ( "black" ) ; // black, white, transparent, custom
51- const [ customBackgroundColor , setCustomBackgroundColor ] = useState ( "#000000" ) ;
50+ const [ backgroundColor , setBackgroundColor ] = useState ( "black" ) ; // black, white, transparent
5251
5352 // UI state
5453 const [ showCodeModal , setShowCodeModal ] = useState ( false ) ;
@@ -91,6 +90,26 @@ export default function Pixel2CPP() {
9190 setRedo ( [ ] ) ;
9291 } , [ w , h ] ) ;
9392
93+ // Update background color when it changes
94+ useEffect ( ( ) => {
95+ setData ( ( prev ) => {
96+ const newData = [ ...prev ] ;
97+ for ( let i = 0 ; i < newData . length ; i ++ ) {
98+ if ( newData [ i ] . a === 0 ) { // Transparent pixels
99+ if ( backgroundColor === "white" ) {
100+ newData [ i ] = white ( ) ;
101+ } else if ( backgroundColor === "black" ) {
102+ newData [ i ] = black ( ) ;
103+ } else {
104+ // transparent - keep as transparent
105+ newData [ i ] = transparent ( ) ;
106+ }
107+ }
108+ }
109+ return newData ;
110+ } ) ;
111+ } , [ backgroundColor ] ) ;
112+
94113 const idx = ( x , y ) => y * w + x ;
95114
96115 // Drawing helpers
@@ -342,9 +361,9 @@ void setup(){
342361}
343362
344363void loop(){}` ;
345- } else if ( drawMode === "HORIZONTAL_RGB565" ) {
346- const words = packRGB565 ( data , w , h ) ;
347- const wordStr = words . map ( hex565 ) . join ( ", " ) ;
364+ } else if ( drawMode === "HORIZONTAL_RGB565" ) {
365+ const words = packRGB565 ( data , w , h ) ;
366+ const wordStr = words . map ( hex565 ) . join ( ", " ) ;
348367 return `// Generated by Pixel2CPP (RGB565 for TFT displays)
349368#include <Adafruit_GFX.h>
350369#include <Adafruit_ST7735.h> // Use ST7789, ILI9341, etc. for your display
@@ -401,9 +420,9 @@ void drawImagePixelByPixel(int16_t x0, int16_t y0) {
401420 }
402421}
403422*/` ;
404- } else if ( drawMode === "HORIZONTAL_RGB888_24" ) {
405- const bytes = packRGB24 ( data , w , h ) ;
406- const byteStr = bytes . map ( ( b ) => "0x" + b . toString ( 16 ) . toUpperCase ( ) . padStart ( 2 , "0" ) ) . join ( ", " ) ;
423+ } else if ( drawMode === "HORIZONTAL_RGB888_24" ) {
424+ const bytes = packRGB24 ( data , w , h ) ;
425+ const byteStr = bytes . map ( ( b ) => "0x" + b . toString ( 16 ) . toUpperCase ( ) . padStart ( 2 , "0" ) ) . join ( ", " ) ;
407426 return `// Generated by Pixel2CPP (RGB24 for ESP32/high-memory displays)
408427#include <Adafruit_GFX.h>
409428#include <Adafruit_ILI9341.h> // Use appropriate display library
@@ -452,9 +471,9 @@ void drawImage(int16_t x0, int16_t y0) {
452471 }
453472 }
454473}` ;
455- } else if ( drawMode === "HORIZONTAL_RGB332" ) {
456- const bytes = packRGB332 ( data , w , h ) ;
457- const byteStr = bytes . map ( ( b ) => "0x" + b . toString ( 16 ) . toUpperCase ( ) . padStart ( 2 , "0" ) ) . join ( ", " ) ;
474+ } else if ( drawMode === "HORIZONTAL_RGB332" ) {
475+ const bytes = packRGB332 ( data , w , h ) ;
476+ const byteStr = bytes . map ( ( b ) => "0x" + b . toString ( 16 ) . toUpperCase ( ) . padStart ( 2 , "0" ) ) . join ( ", " ) ;
458477 return `// Generated by Pixel2CPP (RGB332 for low-memory/retro displays)
459478#include <Adafruit_GFX.h>
460479#include <Adafruit_SSD1331.h> // Or other 8-bit color displays
@@ -502,9 +521,9 @@ void drawImage(int16_t x0, int16_t y0) {
502521 - Green: 3 bits (0-7)
503522 - Blue: 2 bits (0-3)
504523*/` ;
505- } else if ( drawMode === "HORIZONTAL_GRAY4" ) {
506- const bytes = packGray4 ( data , w , h ) ;
507- const byteStr = bytes . map ( ( b ) => "0x" + b . toString ( 16 ) . toUpperCase ( ) . padStart ( 2 , "0" ) ) . join ( ", " ) ;
524+ } else if ( drawMode === "HORIZONTAL_GRAY4" ) {
525+ const bytes = packGray4 ( data , w , h ) ;
526+ const byteStr = bytes . map ( ( b ) => "0x" + b . toString ( 16 ) . toUpperCase ( ) . padStart ( 2 , "0" ) ) . join ( ", " ) ;
508527 return `// Generated by Pixel2CPP (4-bit Grayscale for E-ink/EPD)
509528#include <Adafruit_GFX.h>
510529#include <Adafruit_EPD.h> // Use appropriate e-ink library
@@ -1423,12 +1442,12 @@ const GFXfont ${safeName} PROGMEM = {
14231442 </ label >
14241443 ) ) }
14251444 </ div >
1426- < div className = "text-xs text-neutral-400 bg-neutral-800/50 p-2 rounded" >
1427- < div className = "font-medium mb-1" > Background affects display only :</ div >
1428- < div > • Black: White pixels = "on" (1) </ div >
1429- < div > • White: Black pixels = "on" (1) </ div >
1430- < div > • Transparent: Alpha > 0 = "on" (1 )</ div >
1431- </ div >
1445+ < div className = "text-xs text-neutral-400 bg-neutral-800/50 p-2 rounded" >
1446+ < div className = "font-medium mb-1" > Background color fills transparent areas :</ div >
1447+ < div > • Black: Transparent areas become black pixels </ div >
1448+ < div > • White: Transparent areas become white pixels </ div >
1449+ < div > • Transparent: Keeps transparent areas (alpha = 0 )</ div >
1450+ </ div >
14321451 </ div >
14331452 </ >
14341453 ) }
@@ -1502,18 +1521,17 @@ const GFXfont ${safeName} PROGMEM = {
15021521 < div className = "space-y-4" >
15031522 { /* Canvas Container */ }
15041523 < div className = "bg-neutral-900 rounded-2xl p-4 overflow-auto inline-block shadow-xl border border-neutral-700" >
1505- < PixelCanvas
1506- width = { w }
1507- height = { h }
1508- zoom = { zoom }
1509- pixels = { data }
1510- backgroundColor = { backgroundColor }
1511- customBackgroundColor = { customBackgroundColor }
1512- cursor = { tool === "eyedropper" ? "crosshair" : "pointer" }
1513- onPointerDown = { handleMouseDown }
1514- onPointerMove = { handleMouseMove }
1515- onPointerUp = { handleMouseUp }
1516- />
1524+ < PixelCanvas
1525+ width = { w }
1526+ height = { h }
1527+ zoom = { zoom }
1528+ pixels = { data }
1529+ backgroundColor = { backgroundColor }
1530+ cursor = { tool === "eyedropper" ? "crosshair" : "pointer" }
1531+ onPointerDown = { handleMouseDown }
1532+ onPointerMove = { handleMouseMove }
1533+ onPointerUp = { handleMouseUp }
1534+ />
15171535 </ div >
15181536
15191537 { /* Canvas Info */ }
0 commit comments