Code challenges are goodJ. Baker wrote:Also, I don't need this code for anything. This is just a "challenge" really. Well, that and I do like 4bit graphics, Dos, ect.

I noticed you have to output the PNG image as 8 bit or 24 bit. If you output 4 bit, it messes up the palette even if only 16 CGA colors are used.
Here's my previous code altered a bit to now not to use so much black
Code: Select all
Procedure CGA(color)
!mov ecx, [p.v_color]
!and ecx, 0xc0e0e0
!mov eax, ecx
!shr ecx, 16
!shr eax, 5
!or cl, al
!shr eax, 5
!or cl, al
CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
!mov eax, [cga_table256bgr + ecx * 4]
CompilerElse
!lea rdx, [cga_table256bgr]
!mov eax, [rdx + rcx * 4]
CompilerEndIf
ProcedureReturn
!cga_table256bgr:
!dd 0x000000,0x555555,0x0000AA,0x0000AA,0x0000AA,0x0000AA,0x0000AA,0x0000AA
!dd 0x555555,0x555555,0x555555,0x0000AA,0x0000AA,0x0000AA,0x0000AA,0x0000AA
!dd 0x00AA00,0x555555,0x555555,0x0055AA,0x0055AA,0x0055AA,0x0055AA,0x0055AA
!dd 0x00AA00,0x00AA00,0x555555,0x0055AA,0x0055AA,0x0055AA,0x0055AA,0x0055AA
!dd 0x00AA00,0x00AA00,0x00AA00,0x0055AA,0x0055AA,0x0055AA,0x0055AA,0x0055AA
!dd 0x00AA00,0x00AA00,0x00AA00,0x00AA00,0x0055AA,0x0055AA,0x0055AA,0x55FFFF
!dd 0x00AA00,0x00AA00,0x00AA00,0x55FF55,0x55FF55,0x55FFFF,0x55FFFF,0x55FFFF
!dd 0x00AA00,0x00AA00,0x55FF55,0x55FF55,0x55FF55,0x55FFFF,0x55FFFF,0x55FFFF
!dd 0xAA0000,0xAA0000,0x555555,0x555555,0x0000AA,0x0000AA,0x5555FF,0x5555FF
!dd 0xAA0000,0x555555,0x555555,0x555555,0x555555,0x5555FF,0x5555FF,0x5555FF
!dd 0x555555,0x555555,0x555555,0x555555,0x555555,0x5555FF,0x5555FF,0x5555FF
!dd 0x555555,0x555555,0x555555,0x555555,0x555555,0x5555FF,0x5555FF,0x5555FF
!dd 0x00AA00,0x555555,0x555555,0x555555,0x555555,0xAAAAAA,0x5555FF,0x5555FF
!dd 0x00AA00,0x55FF55,0x55FF55,0x55FF55,0xAAAAAA,0xAAAAAA,0x55FFFF,0x55FFFF
!dd 0x55FF55,0x55FF55,0x55FF55,0x55FF55,0x55FF55,0x55FFFF,0x55FFFF,0x55FFFF
!dd 0x55FF55,0x55FF55,0x55FF55,0x55FF55,0x55FF55,0x55FFFF,0x55FFFF,0x55FFFF
!dd 0xAA0000,0xAA0000,0xAA0000,0xAA00AA,0xAA00AA,0xAA00AA,0xAA00AA,0xAA00AA
!dd 0xAA0000,0xAA0000,0xAA0000,0xAA00AA,0xAA00AA,0xAA00AA,0xAA00AA,0xAA00AA
!dd 0xAA0000,0xAA0000,0x555555,0x555555,0xAA00AA,0xAA00AA,0xAA00AA,0x5555FF
!dd 0xAAAA00,0xAAAA00,0x555555,0xAAAAAA,0xAAAAAA,0xAAAAAA,0xAAAAAA,0x5555FF
!dd 0xAAAA00,0xAAAA00,0xAAAA00,0xAAAAAA,0xAAAAAA,0xAAAAAA,0xAAAAAA,0xAAAAAA
!dd 0xAAAA00,0xAAAA00,0xAAAA00,0xAAAAAA,0xAAAAAA,0xAAAAAA,0xAAAAAA,0xAAAAAA
!dd 0xAAAA00,0xAAAA00,0xAAAA00,0xAAAAAA,0xAAAAAA,0xAAAAAA,0xAAAAAA,0x55FFFF
!dd 0xAAAA00,0xAAAA00,0x55FF55,0x55FF55,0xAAAAAA,0xAAAAAA,0x55FFFF,0x55FFFF
!dd 0xAA0000,0xAA0000,0xFF5555,0xFF5555,0xAA00AA,0xAA00AA,0xFF55FF,0xFF55FF
!dd 0xAA0000,0xFF5555,0xFF5555,0xFF5555,0xFF5555,0xFF55FF,0xFF55FF,0xFF55FF
!dd 0xFF5555,0xFF5555,0xFF5555,0xFF5555,0xFF5555,0xFF55FF,0xFF55FF,0xFF55FF
!dd 0xFF5555,0xFF5555,0xFF5555,0xFF5555,0xFF5555,0xFF55FF,0xFF55FF,0xFF55FF
!dd 0xAAAA00,0xFF5555,0xFF5555,0xFF5555,0xFF5555,0xAAAAAA,0xFF55FF,0xFF55FF
!dd 0xAAAA00,0xFFFF55,0xFFFF55,0xFFFF55,0xAAAAAA,0xAAAAAA,0xFFFFFF,0xFFFFFF
!dd 0xFFFF55,0xFFFF55,0xFFFF55,0xFFFF55,0xFFFF55,0xFFFFFF,0xFFFFFF,0xFFFFFF
!dd 0xFFFF55,0xFFFF55,0xFFFF55,0xFFFF55,0xFFFF55,0xFFFFFF,0xFFFFFF,0xFFFFFF
EndProcedure
For each pixel you compute
Sqr((R1-R0)*(R1-R0) + (G1-G0)*(G1-G0)+(B1-B0)*(B1-B0))
for every palette color and take the color that returns the lowest result.