资源描述
MTK平台上根据BMP格式图片来做自己喜欢的字体
本人在做ADAM项目上的诺基亚风格过程中,在桌面上显示诺基亚风格的时间而自定义了自己的一套字库,因发现在制作的过程中还是有很多的细节问题需要注意,特将整个过程记录下来,既可以加深本人的印象,又可帮助大家在后续的开发过程中节省制作和开发时间。本文仅是记录本人的制作和开发过程,有错误地方还望大家多多指教。
一、 美工提供一位的bmp格式的图片:
该图片要特别注意的一个地方,就是是一位的,为白色底黑色的字,最后改为下面这个格式才保证后面在MCT中,导出的buf数据正确
二、 利用MCT工具将上面的一位的bmp格式图片导出生成一个BDF格式的文件
在MCT中,将先前的美工提供的一位bmp图片导入进来,注意图片的命名,其中,直接以数字命名该格式图片最好,该工具有点变态,识别不出一些字母命名或一些名字不规范的图片,将导入的图片按顺序从左边导入到右边,在右边的Unicode栏中,将相应的图片上的字母或者数字正确的UNICODE编码填上,一定要填写正确,注意,UNICODE编码为16进制,其实一些数字和字母的unicode编码可以在UItraEdit中查到。最后,点击create BDF按钮,导出一个.Bdf格式的文件。。
三、 利用MCT中利用Font Customizer工具,将上面导出的bdf文件导入进来,
Step 1 选择自己生成工具
Step 2 在编辑框中输入自己想生成字体的名字
Step 3 这三项设置基本都按默认的都可以
Step 4 输入字体的名字
Step 5 选择字体类型,并导入bdf文件
Step 6 按默认选项,导出两个文件L_CustFont_Test_Big_Font_alpha_medium.h文件和FontRes.c文件。
在*.h文件中有两个数组:
const U32 d0To9_RangeOffset[8]= {
0,60,180,840,900,960,1020,1080,};
const U8 d0To9_Data[1140]= { //图片的数据buf
0x0,0x0,0x30,0xC,0x18,0x6,0x4,0x3,0x82,0x1,0x41,0x80,0x30,0x60,0x18,0x30,
0xC,0xFF,0xBF,0xFF,0x1F,0x86,0x1,0xC3,0x80,0x61,0xC0,0x18,0x60,0xC,0x30,0x6,
0xFF,0x9F,0xFF,0xF,0xC6,0x0,0x63,0x80,0x31,0x40,0x8,0x30,0x6,0x18,0x3,0x8C,
0x1,0xC6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x0,0x0,0x0,0x0,0x0,0x0,0x6,0x0,0x3,0x80,0x1,0xC0,0x0,0x60,0xC0,0x30,
0xEC,0x9B,0xF7,0xFF,0xC3,0x3F,0x80,0x7,0xC0,0x7,0x30,0x3,0x9C,0x3,0x87,0x83
。。。。。。。
};
在FontRes.c文件中
#include "FontRes.h"
#include "MMI_features.h"
#ifndef NULL
#define NULL (void *)0 /* NULL : Null pointer */
#endif
#define MAX_LANGUAGES 30
#include "L_CustFont_Test_Big_Font_alpha_medium.h"
#if !defined (MMI_ON_HARDWARE_P)
__declspec(dllexport)
#endif
const U16 mtk_gMaxDeployedLangs = 1 ;
const RangeData d0To9_RangeData[8]={
{35,35},
{42,43},
{48,58},
{80,80},
{87,87},
{97,97},
{109,109},
{112,112},
};
const RangeDetails d0To9_RangeInfo={
8,
d0To9_RangeData
};
sCustFontData alpha_medium = {
32, 15, 1, 60, 500,
(U8*)NULL, (U32*)NULL, (U8*)d0To9_Data, (U32*)d0To9_RangeOffset,
{
{0, 0},
{FONTATTRIB_NORMAL|FONTATTRIB_BOLD|FONTATTRIB_ITALIC|FONTATTRIB_OBLIQUE|FONTATTRIB_UNDERLINE|FONTATTRIB_STRIKETHROUGH,FONTATTRIB_NORMAL|FONTATTRIB_BOLD|FONTATTRIB_ITALIC|FONTATTRIB_OBLIQUE|FONTATTRIB_UNDERLINE|FONTATTRIB_STRIKETHROUGH},
{0, 0},
{0, 0},
{0, 0} },
&d0To9_RangeInfo};
sFontFamily CustFont_Test_Big_Font={ 1, {&(null),&alpha_medium,&(null),&(null),&(null)} };
#if !defined (__CUSTOMER_LEVEL_1_RELEASE__) && !defined (MMI_ON_HARDWARE_P)
__declspec(dllexport)
#endif
const sLanguageDetails mtk_gLanguageArray[MAX_LANGUAGES] = {
{{ (char)0x43, (char)0x0, (char)0x75, (char)0x0, (char)0x73, (char)0x0, (char)0x74, (char)0x0, (char)0x46, (char)0x0, (char)0x6f, (char)0x0, (char)0x6e, (char)0x0, (char)0x74, (char)0x0,},
"*#0044#",
0,
{&CustFont_Test_Big_Font},
"zh"
}
四、 将生成的L_CustFont_Test_Big_Font_alpha_medium.h文件导入到工程目录下的vendor\font\MTK\official\project\plutommi\content\inc\MainLcd240X320路径下面
五、 将生成的FontRes.c文件中的内容,如上,主要将上面蓝色字体部分的两个数组拷贝到工程中对应平台相对应的FontRes.c正确的位置。
sCustFontData TimetoShowFont15x32 = { //该名字可以修改为符合平台定义规范的名字
//32, 15, 1, 60, 500,
32, 15, 27, 5,1, 60, 500, //注意在此处添加这两个参数,这两个参数可以调节中文和英文以及数字混合排版的时候的对齐方式,可以让排版显示效果更加美观。
(U8*)NULL, (U32*)NULL, (U8*)d0To9_Data, (U32*)d0To9_RangeOffset,
六、 最后将自己定义的字体添加到平台字库数组中去
sFontFamily pluto_en_standardFamily = {7, //6,平台字库数组的长度变大了
{&Pluto_Small,&Pluto_Medium,&Pluto_Large, &Pluto_SubLCD, DiallingFont22x35_dialling/*&Pluto_Dialling*/,&virtual_keyboard_latin, &TimetoShowFont15x32}};
七、 在FontRes.h中定义自己定义的字体在平台字库数组中的位置宏
#define TIME_TO_SHOW_FONT 0x0006
八、 在FontType.c文件中将自己定义的字体相关的属性填写上自定义的字体在整个平台字库中的索引下标
stFontAttribute MMI_time_show_font= { 0,0,0,TIME_TO_SHOW_FONT,0,1}; //诺基亚桌面时间显示字体风格
九、 这样一个适应自己风格的字体就做好了,在项目中需要用自己定义的字体的时候,只需要调用 gui_set_font(&MMI_time_show_font);
既可以用自己定义的字体来显示相关的内容。
十、 自己定义的自己显示效果
Adam
NOKIA N73
一个自己喜欢的风格的显示效果出来了,但是和传统的诺基亚风格上还是有差别的,在传统的诺基亚风格下,中间的冒号感觉占用的宽度很小,而且很细,而我们做的这个字体中,中间的冒号和其他的数字或字母占用一样的像素宽度和高度,都是15×32,请问哪位,想到解决该缺陷的办法没有?我想到是否可以由美工在做bmp图片的时候,就将该冒号做像素大小和别的数字或字母的像素不一样,比如占用5×32的像素,大家觉得可以解决该问题吗?
展开阅读全文