diff --git a/src/cpcformats.c b/src/cpcformats.c index 840e5aeb..cd89261c 100644 --- a/src/cpcformats.c +++ b/src/cpcformats.c @@ -373,7 +373,7 @@ void Save_SGX(T_IO_Context * context) int i; File_error = 1; - n_colors = Count_used_colors(color_usage); + n_colors = Current_layer_count_used_colors(context, color_usage); for (i = 16; i < 256; i++) { if (color_usage[i] != 0) diff --git a/src/loadsavefuncs.c b/src/loadsavefuncs.c index 82dafb7d..6beaf1b0 100644 --- a/src/loadsavefuncs.c +++ b/src/loadsavefuncs.c @@ -324,3 +324,27 @@ void Palette_64_to_256(T_Palette palette) palette[i].B = (palette[i].B << 2)|(palette[i].B >> 4); } } + +word Current_layer_count_used_colors(T_IO_Context *context, dword *usage) +{ + dword nb_colors = 0; + int i; + word x, y; + + for (i = 0; i < 256; i++) usage[i] = 0; + + for (y = 0; y < context->Height; y++) + { + for (x = 0; x < context->Width; x++) + usage[Get_pixel(context, x, y)]++; + } + + // count the total number of unique used colors + for (i = 0; i < 256; i++) + { + if (usage[i] != 0) + nb_colors++; + } + + return nb_colors; +} diff --git a/src/loadsavefuncs.h b/src/loadsavefuncs.h index e9ec4e50..ee05da0a 100644 --- a/src/loadsavefuncs.h +++ b/src/loadsavefuncs.h @@ -45,4 +45,6 @@ FILE * Open_file_write_with_alternate_ext(T_IO_Context *context, const char * ex void Palette_256_to_64(T_Palette palette); void Palette_64_to_256(T_Palette palette); +word Current_layer_count_used_colors(T_IO_Context *context, dword *usage); + #endif