MTK图片资源的加载有很多种方法,可以适应不同的场合.我们写了一个小软件,从磁盘调用文件预以显示,大体上看起来像一个图片浏览器.为了使文件显示起来更加自然,我在进入图片浏览器时会判断磁盘上有没有默认的图片浏览器背景,如果没有,我会自动创建一个JPG文件写入磁盘供程序调用.原理与我很久以前使用C语言写资源文件的算法一样,只不过API换成了MTK的.如下:
//输入:带文件名的路径,文件数组,数组大小sizeof //输出:一个T卡文件,返回文件长度,为零为出错 //exp:WriteJpgFile(L"E://aa.jpg", filedata, sizeof(filedata)); int WriteJpgFile(const WCHAR * fn, char * data, U32 len) { FILE *pf; U32 wlen; MMI_ASSERT((fn != NULL) && (data != NULL) && (len != 0)); pf = FS_Open((char *)fn, FS_CREATE|FS_READ_WRITE); if (pf<0) { return 0; } FS_Write(pf, data, len, &wlen); if (wlen != len) { FS_Close(pf); return 0; } else { FS_Close(pf); return len; } }
可以使用如下数组代入测试,有关图片数组的创建,请参考我的文章http://blog.csdn.net/blogercn/archive/2009/08/23/4475981.aspx
U8 GRAPHIC_NOTE_DEFAULT_ICON[] = { 255,216,255,224,0,16,74,70,73,70,0,1,2,0,0,100,0,100,0,0,255,236,0,17,68,117,99,107,121,0,1,0,4,0,0,0,100,0,0,255,238,0,14,65,100,111,98,101,0,100,192,0,0,0,1,255,219,0,132,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,1,1,1,1,1,1,1,2,1,1,2,2,2,1,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,255,192,0,17,8,0,222,0,240,3,1,17,0,2,17,1,3,17,1,255,196,1,162,0,0,0,6,2,3,1,0,0,0,0,0,0,0,0,0,0,7,8,6,5,4,9,3,10,2,1,0,11,1,0,0,6,3,1,1,1,0,0,0,0,0,0,0, 0,0,6,5,4,3,7,2,8,1,9,0,10,11,16,0,2,1,3,4,1,3,3,2,3,3,3,2,6,9,117,1,2,3,4,17,5,18,6,33,7,19,34,0,8,49,20,65,50,35,21,9,81,66,22,97,36,51,23,82,113,129,24,98,145,37,67,161,177,240,38,52,114,10,25,193,209,53,39,225,83,54,130,241,146,162,68,84,115,69,70,55,71,99,40,85,86,87,26,178,194,210,226,242,100,131,116,147,132,101,163,179,195,211,227,41,56,102,243,117,42,57,58,72,73,74,88,89,90,103,104,105,106,118,119,120,121,122,133,134,135,136,137,138,148,149,150,151,152,153,154,164,165,166,167,168,169,170,180,181,182,183,184,185,186,196,197,198,199,200,201,202,212,213,214,215,216,217,218,228,229,230,231,232,233,234,244,245,246,247,248,249,250,17,0,2,1,3,2,4,4,3,5,4,4,4,6,6,5,109,1,2,3,17,4,33,18,5,49,6,0,34,19,65,81,7,50,97,20,113,8,66,129,35,145,21,82,161,98,22,51,9,177,36,193,209,67,114,240,23,225,130,52,37,146,83, 24,99,68,241,162,178,38,53,25,84,54,69,100,39,10,115,131,147,70,116,194,210,226,242,85,101,117,86,55,132,133,163,179,195,211,227,243,41,26,148,164,180,196,212,228,244,149,165,181,197,213,229,245,40,71,87,102,56,118,134,150,166,182,198,214,230,246,103,119,135,151,167,183,199,215,231,247,72,88,104,120,136,152,168,184,200,216,232,248,57,73,89,105,121,137,153,169,185,201,217,233,249,42,58,74,90,106,122,138,154,170,186,202,218,234,250,255,218,0,12,3,1,0,2,17,3,17,0,63,0,223,227,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247, 238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238, 189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189, 215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215, 189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189, 251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251, 175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175, 117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117, 239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239, 126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126, 235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235, 221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221, 123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123, 223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223, 186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,123,223,186,247,94,247,238,189,215,189,251,175,117,239,126,235,221,127,255,217, };
制作图片浏览器还有一个重要的功能是放大缩小旋转图片:
旋转图片可以使用下面函数实现:
gdi_layer_get_position(&layer_x, &layer_y);
gdi_layer_set_position(0, 0);
gdi_layer_set_rotate(rotate);
由于MTK使用的是矩形框为原点旋转,所以需要重新校正图片位置
放大缩小为了不使用图片失真,一般需要等比例缩放.为了避免使用浮点运算且到结果精确到小数点后三位,所以使用放大一千倍操作.
gdi_draw_solid_rect(0, 0, UI_device_width, UI_device_height, GDI_COLOR_BLACK); if ((img_w> UI_device_width) || (img_h> UI_device_width)) { if (((img_w*1000)/(UI_device_width)) > ((img_h*1000)/(UI_device_width))) { resize_w = UI_device_width; resize_h = (UI_device_width*((UI_device_width*1000)/(img_w)))/1000; gdi_draw_rect(((UI_device_width - resize_w)>>1)-1, ((UI_device_width - resize_h)>>1)-1, resize_w+2, resize_h+2, GDI_COLOR_WHITE); gdi_image_draw_resized_file((UI_device_width - resize_w)>>1, (UI_device_width - resize_h)>>1, resize_w, resize_h, filefullname); } else { resize_w = (UI_device_width*((UI_device_width*1000)/img_h)/1000); resize_h = UI_device_width; gdi_draw_rect(((UI_device_width - resize_w)>>1)-1, ((UI_device_width - resize_h)>>1)-1, resize_w+2, resize_h+2, GDI_COLOR_WHITE); gdi_image_draw_resized_file((UI_device_width - resize_w)>>1, (UI_device_width - resize_h)>>1, resize_w, resize_h, filefullname); } } else { gdi_image_draw_resized_file((UI_device_width - img_w)>>1, (UI_device_width - img_h)>>1, img_w, img_h, filefullname); }
太忙了,简单记录,待日后整理.
声明:
本文受著作权法保护,严禁转载,违者必究!