Check_block_constraints() to check block constraints
This commit is contained in:
parent
811ae20534
commit
216f18607d
@ -167,6 +167,68 @@ void Menu_tag_colors(char * window_title, byte * table, byte * mode, byte can_ca
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// Block Constraint check
|
||||||
|
///
|
||||||
|
/// This function count the number of colors in a block and reports errors
|
||||||
|
/// by marking the pixel in color 17 in layer 2.
|
||||||
|
/// @param block_width block width
|
||||||
|
/// @param block_height block height
|
||||||
|
/// @param max_colors numbers of colors allowed in a block
|
||||||
|
/// @return the number of constraint errors detected
|
||||||
|
static int Check_block_constraints(int block_width, int block_height, int max_colors)
|
||||||
|
{
|
||||||
|
int x, y, x2, y2;
|
||||||
|
int error_count = 0;
|
||||||
|
|
||||||
|
for (y = 0; y <= Main.image_height - block_height; y += block_height)
|
||||||
|
{
|
||||||
|
for (x = 0; x <= Main.image_width - block_width; x += block_width)
|
||||||
|
{
|
||||||
|
int count = 0;
|
||||||
|
byte c[16]; // colors already used in block
|
||||||
|
|
||||||
|
for (y2 = 0; y2 < block_height; y2++)
|
||||||
|
{
|
||||||
|
for (x2 = 0; x2 < block_width; x2++)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
byte col = Main.backups->Pages->Image[0].Pixels[x+x2 + (y+y2)*Main.image_width];
|
||||||
|
if (col > 15) // forbidden color !
|
||||||
|
{
|
||||||
|
if (Main.backups->Pages->Nb_layers < 2)
|
||||||
|
Button_Layer_add(-1);
|
||||||
|
Main.backups->Pages->Image[1].Pixels[x+x2 + (y+y2)*Main.image_width] = 17;
|
||||||
|
error_count++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// search color in already used ones
|
||||||
|
for (i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
if (col == c[i])
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (i >= count) // not found
|
||||||
|
{
|
||||||
|
if (count >= max_colors)
|
||||||
|
{
|
||||||
|
// constraint error : add color 17 pixel in layer 2
|
||||||
|
GFX2_Log(GFX2_INFO, "Check_block_constraints() constraint error at (%d,%d)\n", x+x2, y+y2);
|
||||||
|
if (Main.backups->Pages->Nb_layers < 2)
|
||||||
|
Button_Layer_add(-1);
|
||||||
|
Main.backups->Pages->Image[1].Pixels[x+x2 + (y+y2)*Main.image_width] = 17;
|
||||||
|
error_count++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
c[count++] = col;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return error_count;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// Constaint enforcer/checker
|
/// Constaint enforcer/checker
|
||||||
///
|
///
|
||||||
/// A call toggles between constraint mode and Layered mode.
|
/// A call toggles between constraint mode and Layered mode.
|
||||||
@ -190,8 +252,11 @@ void Button_Constraint_mode(void)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Selected_Constraint_Mode == IMAGE_MODE_MODE5 || Selected_Constraint_Mode == IMAGE_MODE_RASTER)
|
// now check the constraints on existing pixels
|
||||||
|
switch (Selected_Constraint_Mode)
|
||||||
{
|
{
|
||||||
|
case IMAGE_MODE_MODE5:
|
||||||
|
case IMAGE_MODE_RASTER:
|
||||||
// switch to layer mode if needed
|
// switch to layer mode if needed
|
||||||
if (Main.backups->Pages->Image_mode != IMAGE_MODE_LAYERED)
|
if (Main.backups->Pages->Image_mode != IMAGE_MODE_LAYERED)
|
||||||
Switch_layer_mode(IMAGE_MODE_LAYERED);
|
Switch_layer_mode(IMAGE_MODE_LAYERED);
|
||||||
@ -207,6 +272,19 @@ void Button_Constraint_mode(void)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
case IMAGE_MODE_THOMSON:
|
||||||
|
Check_block_constraints(8, 1, 2);
|
||||||
|
break;
|
||||||
|
case IMAGE_MODE_ZX: /// @todo check color intensities for ZX spectrum
|
||||||
|
case IMAGE_MODE_C64HIRES:
|
||||||
|
Check_block_constraints(8, 8, 2);
|
||||||
|
break;
|
||||||
|
case IMAGE_MODE_C64MULTI: /// @todo check common background color for C64 Multicolor
|
||||||
|
Check_block_constraints(4, 8, 4);
|
||||||
|
break;
|
||||||
|
default: // nothing to do.
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
/// Setting the palette is done in @ref Button_Constraint_menu (8-bit constraint window)
|
/// Setting the palette is done in @ref Button_Constraint_menu (8-bit constraint window)
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user