mirror of
https://github.com/silenty4ng/uv-k5-firmware-chinese-lts
synced 2025-01-15 14:54:40 +00:00
137 lines
4.1 KiB
C++
137 lines
4.1 KiB
C++
#include <bits/stdc++.h>
|
|
#include "font.h"
|
|
|
|
using namespace std;
|
|
ofstream out_chinese_array("../chinese_array.txt");
|
|
|
|
void set_bit(uint8_t *value, uint8_t bit_position, uint8_t bit_value) {
|
|
if (bit_value == 0) {
|
|
*value = *value & ~(1 << bit_position);
|
|
} else {
|
|
*value = *value | (1 << bit_position);
|
|
}
|
|
}
|
|
|
|
#define IS_BIT_SET(byte, bit) ((byte>>bit) & (1))
|
|
|
|
void show_font(unsigned char show_font[22]) {
|
|
unsigned char bitmap[CHN_FONT_HIGH][CHN_FONT_WIDTH] = {0};
|
|
for (int i = 0; i < CHN_FONT_WIDTH * 2; i++) {
|
|
if (i < CHN_FONT_WIDTH) {
|
|
for (int j = 0; j < 8; j++) {
|
|
if (IS_BIT_SET(show_font[i], j))
|
|
bitmap[j][i] = 1;
|
|
}
|
|
} else {
|
|
for (int j = 0; j < CHN_FONT_HIGH - 8; ++j) {
|
|
bitmap[j + 8][i - CHN_FONT_WIDTH] = IS_BIT_SET(show_font[i], j);
|
|
}
|
|
}
|
|
|
|
}
|
|
for (int i = 0; i < CHN_FONT_HIGH; ++i) {
|
|
for (int j = 0; j < CHN_FONT_WIDTH; ++j) {
|
|
if (bitmap[i][j])
|
|
printf("1");
|
|
else
|
|
printf("0");
|
|
}
|
|
printf("\n");
|
|
|
|
}
|
|
}
|
|
bool check_font(unsigned char *font1,unsigned char *font2)
|
|
{
|
|
return (memcmp(font1,font2,CHN_FONT_WIDTH*2)==0);
|
|
}
|
|
void back_font(int num_show, unsigned char *font) { //压缩转显存显示
|
|
unsigned int local = CHN_FONT_HIGH * CHN_FONT_WIDTH * num_show / 8;
|
|
unsigned int local_bit = (CHN_FONT_HIGH * CHN_FONT_WIDTH * num_show) % 8;
|
|
unsigned char now_font[CHN_FONT_WIDTH * 2] = {0};
|
|
for (int i = 0; i < CHN_FONT_WIDTH*2; ++i) {
|
|
unsigned char j_end=8;
|
|
if(i>=CHN_FONT_WIDTH)
|
|
j_end=CHN_FONT_HIGH-8 ;
|
|
|
|
for (int j = 0; j < j_end; ++j) {
|
|
|
|
if (IS_BIT_SET(font[local], local_bit))
|
|
set_bit(&now_font[i], j, 1);
|
|
local_bit++;
|
|
if (local_bit == 8) {
|
|
local_bit = 0;
|
|
local++;
|
|
}
|
|
}
|
|
|
|
}
|
|
if(!check_font(now_font,new_font[num_show]))
|
|
{
|
|
printf("SB\n");
|
|
}
|
|
}
|
|
|
|
int main() {
|
|
unsigned int NEW_FONT_BYTE = ceil((float) (CHN_FONT_NUM) * (float) (CHN_FONT_HIGH) * (float) (CHN_FONT_WIDTH) / 8);
|
|
cout << NEW_FONT_BYTE << endl;
|
|
unsigned char gFontChinese_out[NEW_FONT_BYTE] = {0};
|
|
|
|
// show_font(new_font[0]);
|
|
// return 0;
|
|
int now_byte_index = 0;
|
|
int now_bit_index = 0;
|
|
for (int k = 0; k < CHN_FONT_NUM; k++) {//压缩
|
|
unsigned char bitmap[CHN_FONT_HIGH][CHN_FONT_WIDTH] = {0};
|
|
for (int i = 0; i < CHN_FONT_WIDTH * 2; i++) {
|
|
if (i < CHN_FONT_WIDTH) {
|
|
for (int j = 0; j < 8; j++) {
|
|
if (IS_BIT_SET(new_font[k][i], j))
|
|
bitmap[j][i] = 1;
|
|
}
|
|
} else {
|
|
for (int j = 0; j < CHN_FONT_HIGH - 8; ++j) {
|
|
bitmap[j + 8][i - CHN_FONT_WIDTH] = IS_BIT_SET(new_font[k][i], j);
|
|
}
|
|
}
|
|
}
|
|
|
|
for (int i = 0; i < CHN_FONT_WIDTH; ++i) {
|
|
for (int j = 0; j < 8; ++j) {
|
|
if (bitmap[j][i])
|
|
set_bit(&gFontChinese_out[now_byte_index], now_bit_index, 1);
|
|
|
|
now_bit_index++;
|
|
if (now_bit_index == 8) {
|
|
now_bit_index = 0;
|
|
now_byte_index++;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
for (int i = 0; i < CHN_FONT_WIDTH; ++i) {
|
|
for (int j = 8; j < CHN_FONT_HIGH; ++j) {
|
|
if (bitmap[j][i])
|
|
set_bit(&gFontChinese_out[now_byte_index], now_bit_index, 1);
|
|
now_bit_index++;
|
|
if (now_bit_index == 8) {
|
|
now_bit_index = 0;
|
|
now_byte_index++;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
back_font(k, gFontChinese_out);
|
|
|
|
}
|
|
out_chinese_array<<"gFontChinese_out[SUM_BYTE]={"<<endl;
|
|
for (int i = 0; i < NEW_FONT_BYTE; i++) {
|
|
out_chinese_array << "0X" << hex << setw(2) << setfill('0') << uppercase << (int) gFontChinese_out[i]<<",";
|
|
if(i%6==0&&i!=0)out_chinese_array<<endl;
|
|
}
|
|
out_chinese_array<<"};";
|
|
out_chinese_array.close();
|
|
|
|
|
|
}
|