上周完成了8位色位图的载入,并且完成了TG_Palette类。BMP位图还有4位、1位等,但我不准备支持那些格式,4位的TG_Texture我准备用做16位TG_Texture的alpha通道,1位的TG_Texture准备用于绘制阴影,这些格式的TG_Texture将在以后的自定义格式中来支持。在位图的读取操作中要注意图片宽度的位对齐问题。
在TG_2DSurface中完成了12位色和16位色的BitBlt方法,支持绘制时的翻转和旋转(ROT_90DEG,ROT_180DEG,ROT_270DEG,ROT_HORIZONTAL,ROT_VERTICAL),同时支持关键色和透明度。12位和16位的Alpha的混合使用32位的无符号整数来计算,没有拆分为3个颜色的分量来计算,具体细节可以参考风云的《游戏之旅--我的编程感悟》的第六章190页,不过使用函数数组没有成功。16位色的混合算法如下:
unsigned short alpha_blender16(int x, int y, int alpha)
{
x = (x | (x<<16)) & 0x7e0f81f;
y = (y | (y<<16)) & 0x7e0f81f;
int result = ( ((x - y) * alpha) / 16 + y) & 0x7e0f81f;
return (unsigned short)((result&0xffff)|(result>>16));
}
Alpha混合支持16级透明度,可以用一个4位的数字表示。
接触了一下symbian第三版的开发,修改了4个部分:
1. 包含头文件<eikstart.h>
2. 修该原来mmp文件中的cpp为exe
3. 在mmp中添加
SYSTEMINCLUDE /epoc32/include/mmf/plugin
第三版修改了程序图标的使用方式,是那种可以缩放的矢量图片SVG格式,具体使用方法还不太清楚
VENDORID 0 // must be 0 for self-signed applications
CAPABILITY NONE
4. 添加了第三版的入口:
GLDEF_C TInt E32Main()
{
return EikStart::RunApplication(NewApplication);
}
5. 修改mmp文件中的资源定义语句
START RESOURCE <project>.rss
TARGETPATH /resource/apps
HEADER
END
6. 添加register资源文件<project>_reg.rss,mmp文件中添加相应的资源定义语句
START RESOURCE <project>.rss
TARGETPATH /private/10003a3f/apps
HEADER
END
当然,最好是重新定义一个专用于第三版的mmp文件,在carbid c++中导入第三版专用的mmp文件就可以了。
目前已经可以在第三版的模拟器上运行,但是还不能在第三版的UIQ模拟器上运行。
以下是各版本模拟器的运行截图:
1.2SDK
2.1 SDK