假设字符数据如下:
#define CHAR_DATA_WIDTH 5
#define CHAR_DATA_HEIGHT 5
#define CHAR_DATA_SIZE 6
int character_data[CHAR_DATA_SIZE][CHAR_DATA_HEIGHT][CHAR_DATA_WIDTH] = {
{...}, // data for 'A'
{...}, // data for 'B'
{...}, // data for 'C'
{...}, // data for 'D'
{...}, // data for 'E'
{...}, // data for 'F'
};
那么,如果你的输入和输出是这样的:
#define INPUT_DATA_WIDTH 4
#define INPUT_DATA_HEIGHT 8
char input_data[INPUT_DATA_HEIGHT][INPUT_DATA_WIDTH] = {
{'F', 'D', 'A', 'E'},
{'E', 'F', 'F', 'C'},
{'A', 'A', 'C', 'C'},
{'C', 'C', 'E', 'B'},
{'B', 'B', 'B', 'A'},
{'A', 'C', 'F', 'A'},
{'A', 'C', 'C', 'B'},
{'A', 'A', 'E', 'E'},
};
#define OUTPUT_DATA_WIDTH INPUT_DATA_WIDTH*CHAR_DATA_WIDTH
#define OUTPUT_DATA_HEIGHT INPUT_DATA_HEIGHT*CHAR_DATA_HEIGHT
int output_data[OUTPUT_DATA_HEIGHT][OUTPUT_DATA_WIDTH] = {};
然后您可以使用它来一次转换输入中的每个字符:
void ConvertInputToOutput()
{
for(int y=0;y<INPUT_DATA_HEIGHT;y++)
for(int x=0;x<INPUT_DATA_WIDTH;x++)
CopyCharacterToOutput(x*CHAR_DATA_WIDTH,y*CHAR_DATA_HEIGHT,input_data[y][x]);
}
CopyCharacterToOutput 的前两个参数是输出数据中应该放置字符数据的位置。第三个参数是要在该位置放入输出的字符。
您可以使用它来将适当的字符数据复制到输出:
void CopyCharacterToOutput(int start_x, int start_y, char character)
{
for(int y=0;y<CHAR_DATA_HEIGHT;y++)
for(int x=0;x<CHAR_DATA_WIDTH;x++)
output_data[y+start_y][x+start_x] = character_data[character-'A'][y][x];
}
output_data需要偏移起始位置,传入的字符需要从字符转换为数组索引。
综上所述,我们得到了这个:
#include <stdio.h>
#define CHAR_DATA_WIDTH 5
#define CHAR_DATA_HEIGHT 5
#define CHAR_DATA_SIZE 6
int character_data[CHAR_DATA_SIZE][CHAR_DATA_HEIGHT][CHAR_DATA_WIDTH] = {
// A
{
{0,1,1,1,0},
{1,0,0,0,1},
{1,1,1,1,1},
{1,0,0,0,1},
{1,0,0,0,1},
},
// B
{
{1,1,1,1,0},
{1,0,0,0,1},
{1,1,1,1,0},
{1,0,0,0,1},
{1,1,1,1,0},
},
// C
{
{0,1,1,1,1},
{1,0,0,0,0},
{1,0,0,0,0},
{1,0,0,0,0},
{0,1,1,1,1},
},
// D
{
{1,1,1,1,0},
{1,0,0,0,1},
{1,0,0,0,1},
{1,0,0,0,1},
{1,1,1,1,0},
},
// E
{
{1,1,1,1,1},
{1,0,0,0,0},
{1,1,1,1,0},
{1,0,0,0,0},
{1,1,1,1,1},
},
// F
{
{1,1,1,1,1},
{1,0,0,0,0},
{1,1,1,1,0},
{1,0,0,0,0},
{1,0,0,0,0},
},
};
#define INPUT_DATA_WIDTH 4
#define INPUT_DATA_HEIGHT 8
char input_data[INPUT_DATA_HEIGHT][INPUT_DATA_WIDTH] = {
{'F', 'D', 'A', 'E'},
{'E', 'F', 'F', 'C'},
{'A', 'A', 'C', 'C'},
{'C', 'C', 'E', 'B'},
{'B', 'B', 'B', 'A'},
{'A', 'C', 'F', 'A'},
{'A', 'C', 'C', 'B'},
{'A', 'A', 'E', 'E'},
};
#define OUTPUT_DATA_WIDTH INPUT_DATA_WIDTH*CHAR_DATA_WIDTH
#define OUTPUT_DATA_HEIGHT INPUT_DATA_HEIGHT*CHAR_DATA_HEIGHT
int output_data[OUTPUT_DATA_HEIGHT][OUTPUT_DATA_WIDTH] = {};
void CopyCharacterToOutput(int start_x, int start_y, char character)
{
for(int y=0;y<CHAR_DATA_HEIGHT;y++)
for(int x=0;x<CHAR_DATA_WIDTH;x++)
output_data[y+start_y][x+start_x] = character_data[character-'A'][y][x];
}
void ConvertInputToOutput()
{
for(int y=0;y<INPUT_DATA_HEIGHT;y++)
for(int x=0;x<INPUT_DATA_WIDTH;x++)
CopyCharacterToOutput(x*CHAR_DATA_WIDTH,y*CHAR_DATA_HEIGHT,input_data[y][x]);
}
void PrintInput()
{
printf("Input: \n\n");
for(int y=0;y<INPUT_DATA_HEIGHT;y++)
{
printf(" ");
for(int x=0;x<INPUT_DATA_WIDTH;x++)
printf(" %c",input_data[y][x]);
printf("\n");
}
printf("\n");
}
void PrintOutput()
{
printf("Output: \n");
for(int y=0;y<OUTPUT_DATA_HEIGHT;y++)
{
if (y%CHAR_DATA_HEIGHT == 0)
printf("\n");
printf(" ");
for(int x=0;x<OUTPUT_DATA_WIDTH;x++)
{
if (x%CHAR_DATA_WIDTH == 0)
printf(" ");
printf(" %d",output_data[y][x]);
}
printf("\n");
}
printf("\n");
}
int main()
{
PrintInput();
ConvertInputToOutput();
PrintOutput();
return 0;
}
试试https://onlinegdb.com/HyLwVkw7u