MTK图形图象函数

合集下载

mtk imgsensor_info 参数

mtk imgsensor_info 参数

mtk imgsensor_info 参数mtk imgsensor_info 参数是用于获取图像传感器信息的函数,它是在Android系统中用于获取传感器数据的一种常见方法。

该参数提供了有关图像传感器状态和性能的详细信息,包括传感器类型、分辨率、曝光时间、光源等信息。

这些信息对于开发者和应用程序开发人员来说非常重要,因为它们可以用于优化图像质量和提高用户体验。

一、函数原型```cint imgsensor_info(struct imgsensor* sensor, u16*sensor_id);```其中,`sensor` 是一个指向 `imgsensor` 结构的指针,该结构包含了传感器相关的信息;`sensor_id` 是一个指向无符号16位整数的指针,用于存储传感器ID。

二、参数说明1. `sensor`:指向 `imgsensor` 结构的指针,用于存储传感器相关的信息。

该结构包含了传感器类型、分辨率、曝光时间、光源等信息。

2. `sensor_id`:指向无符号16位整数的指针,用于存储传感器ID。

通过该参数可以识别不同的传感器型号和版本。

三、函数返回值函数返回一个整数值,表示函数执行的结果。

如果函数执行成功,则返回值为0;否则返回一个非零值,表示发生了错误。

四、参数详解1. `sensor->version`:传感器版本号,表示传感器的型号和版本信息。

2. `sensor->vendor_id`:传感器厂商ID,表示传感器的制造商信息。

3. `sensor->sensor_type`:传感器类型,表示图像传感器的类型,如CMOS、CCD等。

5. `sensor->format`:传感器图像格式,表示图像的像素格式,如RGB、YUV等。

6. `sensor->exposure_time`:曝光时间,表示传感器曝光的时间长度。

7. `sensor->awb_mode`:白平衡模式,表示图像的白平衡模式。

MTK 发送彩信函数

MTK 发送彩信函数
message_send_p->bReadReport = (g_jmms_context->sending_settings.read_report == 1) ? E_TRUE : E_FALSE;
message_send_p->bHideSender = (g_jmms_context->sending_settings.hide_sender == 1) ? E_TRUE : E_FALSE;
if (wap_get_user_agent_brand() == EM_WAP_USERAGENT_BRAND_SE)
message_send_p->uiDate = get_current_utc_time();
message_send_p->bDeliveryReport = (g_jmms_context->sending_settings.delivery_report == 1) ? E_TRUE : E_FALSE;
}
message_send_p->pTo = (JC_CHAR*) g_jmms_context->to_p;
U8 ret = 0;
S32 len = 0;
MSG_HANDLE msg_handle = jmms_context_p->msg_handle;
/* free any allocated memory */
mmi_jmms_free_mms_pdu_memory(g_jmms_context);
if (message_send_p->pReplyChargingInfo == NULL){
mmi_jmms_free_mms_pdu_memory(g_jmms_context);

mtk中的一些函数作用

mtk中的一些函数作用

1. HandleIdleScreenDigitEntry()
判断是否处飞行静音模式
2. IdleScreenDigitHandler()
ShowCategory16Screen()建立拨号输入框,并且注册每个按键的响应
执行数字键‘1’的响应:MMI_key_1_down()
g_ucm_p->call_misc.curr_action = MMI_UCM_DIAL;
装载g_ucm_p->call_list.group_info[freeTab]信息(group_id, call_type, call_state)
装载g_ucm_p->call_list.group_info[freeTab].call_info[0]信息
装载消息结构,发送消息:PRT_USSDVSS_REQ(到L4层分析号码)
L4层分析号码后,返回消息:PRT_USSDVSS_RSP,进入CBACK:
1.PsCBackSetCallFeatures()
根据拨出号码,设置到PHB查找,设置gPhoneNumberStruct
判断是否是紧急呼叫:mmi_ucm_is_sos_number()--CheckValidEmergencyNo1()
判断是否是空号码
判断是否已经存在SOS
判断UCM是否忙:mmi_ucm_is_busy()--没有需要处理的Call,没有OUTGOING, INCOMING的group,没有emergency call。
SetCurrentState(CM_OUTGOING_STATE);
AddNewCallInfo()
MakePsInitiateCall((PU8)MsgStruct, (void*)OutgoingCallConnected);

EmguCV类(CvInvoke_Class) 方法整理

EmguCV类(CvInvoke_Class) 方法整理
cvSet2D
为数组的特定元素分配新值
Determinant
返回方阵矩阵的行列式。
Eigen
计算对称矩阵的特征值和特征向量
Exp
计算输入数组的每个元素的指数
dst(I)= exp(src(I))
FindFundamentalMat
使用四种方法之一计算基本矩阵,如果没有找到矩阵,则返回找到的基本矩阵(1或3)和0的数量
计算源数据的加权平均和,使得acc变为帧序列的运行平均值(Calculates weighted sum of input src and the accumulator acc so that acc becomes a running average of frame sequence: acc(x,y)=(1-alpha) * acc(x,y) + alpha * image(x,y) if mask(x,y)!=0 where alpha regulates update speed (how fastaccumulator forgets about previous frames).
SolvePnPRansac
利用Ransac方法利用点对求解相机姿态
StereoRectify
计算每个摄像机的旋转矩阵(虚拟地)使两个摄像机图像平面处于相同的平面。
Undistort
转换图像以补偿径向和切向透镜失真
UndistortPoints
与cvInitUndistortRectifyMap相似但也不同,相似的内容是他们都可用于校正镜头失真和透视变换。不同的是函数cvInitUndistortRectifyMap实际上执行的是反向转换以初始化地图,而这个函数执行的是正向变换。

第4章 MATLAB图像显示讲解

第4章  MATLAB图像显示讲解

第四章图像显示M a t l a b进行图像处理的步骤如下:↓↓↓↓【目录】一、读图像和图像信息 (2)1、读取图像 (2)2、读取图像信息 (4)二、图像显示 (6)1、i m s h o w(I,n) (6)2、i m s h o w(I,[l o w,h i g h]) (7)3、i m s h o w(B W) (8)4、i m s h o w(X,M A P) (12)5、i m s h o w(R G B) (13)6、显示多帧图像序列 (14)7、i m s h o w f i l e n a m e (17)8、s u b i m a g e (17)三、保存图像 (18)1、i m w r i t e函数 (18)四、图像数据格式转换 (19)07-11、索引图像 (19)2、灰度图像 (19)3、真彩色图像 (20)4、二值图像 (20)一、读图像和图像信息1、读取图像函数i m r e a d可以从任何M a t l a b支持的图像文件格式中,以任意位深度读取一幅图像。

格式为:[X,M A P]=i m r e a d('F I L E N A M E.F M T'),其中:F I L E N A M E-为需要读入的图像文件名称,F M T-为图像格式。

【例】图像读取演示[X1,M A P1]=i m r e a d('演示图像-1位黑白.t i f');[X2,M A P2]=i m r e a d('演示图像-8位灰度.t i f');[X3,M A P3]=i m r e a d('演示图像-256色.t i f');[X4,M A P4]=i m r e a d('演示图像-16位灰度.t i f');[X5,M A P5]=i m r e a d('演示图像-24位色.t i f');[X6,M A P6]=i m r e a d('演示图像-48位色.t i f');07-207-3w h o sN a m e S i z e B y t e s C l a s sM A P10x00d o u b l e a r r a yM A P20x00d o u b l e a r r a yM A P3256x36144d o u b l e a r r a yM A P40x00d o u b l e a r r a yM A P50x00d o u b l e a r r a yM A P60x00d o u b l e a r r a yX1427x427182329l o g i c a l a r r a yX2427x427182329u i n t8a r r a yX3427x427182329u i n t8a r r a yX4427x427364658u i n t16a r r a yX5427x427x3546987u i n t8a r r a yX6427x427x31093974u i n t16a r r a yG r a n d t o t a l i s1824058e l e m e n t s u s i n g2558750b y t e s2、读取图像信息可以通过调用i m f i n f o函数获得与图像文件有关的信息,格式如下:I N F O=i m f i n f o('F I L E N A M E.F M T')其中:返回的I N F O是M a t l a b的一个结构体。

MTK平台camera(摄像头)调试教程

MTK平台camera(摄像头)调试教程

MTK 平台 CAMERA 驱动浅析Camera Driver analysis in the platform of MTKDocument Number:Preliminary (Released) InformationRevision:0.1Release Date:Ghong Confidential Revision 0.1-Feb.14 2012- 1 -Ⓒ2012 Ghong inc.Revision HistoryRevision Date (dd/mm/yyyy)Author Comments0.114/02/2012Guoqing Zhang Draft VersionGhong Confidential Revision 0.1-Feb.14 2012- 2 -Ⓒ2012 Ghong inc.Contents一、.-二、.-三、.-四、.-五、.-、.-、.-、.-、.-六、.-七、.-、.-、.-、.-、.-、.-、.-八、.-).-).-).-九、.-十、.-Ghong Confidential Revision 0.1-Feb.14 2012- 3 -Ⓒ2012 Ghong inc.一、手机Camera的物理结构:FPC: Flexible Printed Circuit 可挠性印刷电路板Sensor:图象传感器IR:红外滤波片Holder:基座Lens:镜头二、Camera的成像原理:景物通过镜头(LENS)生成的光学图像投射到图像传感器(Sensor)表面上,然后转为模拟的电信号,经过 A/D(模数转换)转换后变为数字图像信号,再送到数字信号处理芯片(DSP)中加工处理,再通过 IO 接口传输到 CPU 中处理,通过 LCD 就可以看到图像了。

Ghong Confidential Revision 0.1-Feb.14 2012- 4 -百度文库 - 让每个人平等地提升自我Ⓒ2012 Ghong inc.图像传感器(SENSOR)是一种半导体芯片,其表面包含有几十万到几百万的光电二极管。

MTK一些有用的层函数

MTK一些有用的层函数
dm_register_category_controlled2_callback
该函数会为创建的层指定绘定函数,并且这两个函数只能分别处理DM管理的层,DM管理的层及相关控件可以在结构mmi_dm_control_ids_enum找到,这两个函数可以在DM指定的层上绘图,既可以处理不同的层,也可以处理相同的层,如果不同的层,可以定义在g_categories_controls_map中的control_set_p中定义如下,control_set_p中一般会包含基层,有时也包含新层,定义如下格式
该调用会重新刷屏,很遗憾的是,你新创建的层不在数组dm_layers中,也就不在他刷新的范围内。要么调用dm_add_blt_layer把你的层加入,要么在dm_redraw_category_screen之后再把你自己的层刷到屏上。
使用外部内存创建层
med_alloc_ext_mem
当然类似函数也有很多,如
前三个函数都是刷屏函数,前两个功能一模一样,只能指定刷新的区域,使用前需要用第四个函数指定参与操作的层。第三个可以自己指定要刷到屏的层和区域。需要说明的是,执行gui_BLT_double_buffer和执行gdi_layer_blt_previous不仅效果一样,执行过程也是一样的,gui_BLT_double_buffer只是个函数指针,指向gdi_layer_blt_previous,调用他最后执行的仍然是gdi_layer_blt_previous
设置层的
如果层上的数据是经过十分复杂的运算过程得出来的,比如要在IDLE上显示一个可以使用手指移动的农历是日历,这时就可以在层上画好要显示的数据,通话移动层的位置实现移动效果,要比每次重绘日历要快捷的多。
合并到BASE层

MTK图层资料

MTK图层资料

gui_buffer = GetCurrGuiBuffer(SCR_ID_XXXX);
//设置窗口不带状态栏
entry_full_screen();
//开启多层
gdi_layer_multi_layer_enable();
/*该处的2等于((GDI_LCD_WIDTH*GDI_LCD_HEIGHT*GDI_MAINLCD_BIT_PER_PIXEL)>>3)
}
}
}
gdi_layer_pop_and_restore_active();
gdi_layer_get_active(&last_active_layer);
gdi_layer_flatten(last_active_layer,transit_layer2,NULL,NULL);
gdi_handle my_layer1, my_layer2, my_base_layer;
PU8 buf_ptr;
void exit_myapp_screen(void)
{
if (buf_ptr != NULL)
{
med_free_ext_mem((void **)&buf_ptr);
gdi_layer_create_using_outside_memory(0,0,imge_width,imge_height,&transit_layer1,(PU8)transit_layer_buff_ptr1,transit_layer_buff_size1);
gdi_layer_push_and_set_active(transit_layer1);
}
if (my_layer1 != NULL)

MTK个人笔记

MTK个人笔记
5、MTK工程里面的语言种类,其宏控制和字串ID可以在Res_SSC.c里面的PopulateSSCRes()里面查看。
6、查看进入MTK手机工程模式的指令可在CustResDef.h里,对应值为:SSC_ENGINEERING_MODE。
7、打包命令:armar -r *.a(或者*.lib) *.obj,解包命令:armar -x *.a,执行时都要先运行到obj或者库文件目录下。
22、Idle界面里面的触摸屏函数实现,是通过屏幕模板ShowCategory33Screen实现的,在wgui_categories_idlescreen.c里函数ShowCategory33Screen_ext里有注册,如:
wgui_register_category_screen_control_area_pen_handlers(wgui_cat033_pen_down_handler, MMI_PEN_EVENT_DOWN);注册点下触摸时的响应函数,然后我们可以在此响应函数里设置我们需要的屏幕位置的响应函数。
20、函数TurnOnBacklight(GPIO_BACKLIGHT_SHORT_TIME);用于把手机从背光中开启出来高亮屏幕一小段时间,参数也可换成GPIO_BACKLIGHT_PERMANENT(长久。
21、函数ForceSubLCDScreen(mmi_msg_start_msg_sub_anm)用于强制开启小屏幕提醒界面的,里面的参数只是举例,是提示有新短信收到的,在该函数里还需要调用屏幕模板来实现小窗口,这里用的是ShowCategory304Screen,然后会设置SetSubLCDExitHandler(mmi_msg_callback_msg_sub_anm);停止小窗口。

MTK文件操作常用函数

MTK文件操作常用函数

1. int FS_Open(const WCHAR*FileName, UINT Flag)该函数用来打开一个文件,FielName为文件路径及文件名,Flag为文件的操作属性,其值可为FS_READ_WRITE,FS_READ_ONLY,FS_OPEN_SHARED等。

如果文件打开成功,该函数返回一个大于等于0的值,否则返回一个小于0 的值。

具体操作方法可如下:FS_HANDLE h;if((h = (FS_HANDLE)FS_Open((constWCHAR*)filename,FS_READ_WRITE|FS_OPEN_SHARED|FS_CREATE)) >= 0){FS_Close(h);}注意,这里的路径要转换成Unicode字符串,可以通过AnsiiToUnicodeString(S8 * pOutBuffer, S8 *pInBuffer)函数来实现。

比如我们在D盘的example 文件夹下有一个test.c 文件需要对其进行修改(D:\example\test.c),则:FS_HANDLE h;S8UnicodeName[100];AnsiiToUnicodeString((S8*) UnicodeName, (S8 *)”D:\\example\\test.c”);if((h = (FS_HANDLE)FS_Open((const WCHAR *)UnicodeName,FS_READ_WRITE|FS_OPEN_SHARED|FS_CREATE)) >= 0){FS_Close(h);}也可使用FS_Open((const WCHAR *)L”D:\\example\\t est.c”,FS_READ_WRITE|FS_OPEN_SHARED|FS_CREATE)方式打开。

当对文件修改完成后,要使用函数FS_Close()将其关闭。

2. intFS_Close(FS_HANDLEFileHandle)用来关闭一个已经打开的文件。

MTK常用函数说明

MTK常用函数说明
有子项串ID GetSequenceStringIds 根据菜单的子项ID得到它在整个子项系列中 的序号 GetIndexOfStringId 得到菜单的所有子项菜单ID GetSequenceItemIds 根据菜单ID得到子项数 GetNumOfChild_Ext
得到系统资源(1)
根据ID得到串地址 GetString 得到mainmenu的标题icon GetRootTitleIcon 根据菜单项ID得到对应的串ID GetStringIdOfItem 根据菜单ID得到所有子项的image id 子项系列有可能是image,也有可能是串 GetSequenceImageIds
MTK常用函数 MTK常用函数
内存分配函数
OslMalloc OslFree
字符串和整形数据的转换
一、ascii和unicodeString的转换 AnsiiToUnicodeString AnsiiNToUnicodeString 二、unicode和ansii的转换 UnicodeToAnsii UnicodeNToAnsii
得到系统资源(3)
根据父亲菜单ID和子项索引得到对应子 项的字串或者image id GetSeqItemId_Ext 根据父亲菜单ID和子项索引得到对应子 项的image id GetSeqItemImageId_Ext
屏幕操作函数
SetParentHandler
串操作函数(1)
pfnUnicodeToEncodingScheme pfnEncodingSchemeToUnicode pfnUnicodeStrlen pfnUnicodeStrcpy pfnUnicodeStrncpy
串操作函数(2)
pfnUnicodeStrcmp pfnUnicodeStrncmp pfnUnicodeStrcat pfnUnicodeStrncat pfnUnicodeStrtok

EmguCV常用函数总结

EmguCV常用函数总结

EmguCV常⽤函数总结1 Emgucv常⽤函数总结:2读取图⽚3 Mat SCr = new Mat(Form1.Path, Emgu.CV.CvEnum.LoadImageType.AnyColor);4//根据路径创建指定的灰度图⽚5 Mat scr = new Mat(Form1.Path, Emgu.CV.CvEnum.LoadImageType.Grayscale);6获取灰度//图像类型转换, bgr 转成 gray 类型。

MAT Bw = New MAT7 CvInvoke.CvtColor(SCr, bw, Emgu.CV.CvEnum.ColorConversion.Bgr2Gray);8//相当于⼆值化图 --⿊⽩根据⼤⼩10判断为0还是2559 CvInvoke.Threshold(bw,bw,10,255,Emgu.CV.CvEnum.ThresholdType.BinaryInv);10//获取指定区域图⽚ SCr为mat类型11 Rectangle rectangle = new Rectangle(10,10,10,10);12 SCr = SCr.ToImage<Bgr, byte>().GetSubRect(rectangle).Mat;13//将Mat类型转换为Image类型14 Image<Bgr, byte> Su = SCr.ToImage<Bgr, byte>();15 Image<Bgr, byte> Img = new Image<Bgr, byte>(new Bitmap(""));//路径声明16 Image<Bgr, byte> Sub = SCr.ToImage<Bgr, byte>().GetSubRect(rectangle);//指定范围17//指定参数获得结构元素18 Mat Struct_element = CvInvoke.GetStructuringElement(Emgu.CV.CvEnum.ElementShape.Cross, new Size(3, 3), new Point(-1, -1));19//膨胀20 CvInvoke.Dilate(bw, bw, Struct_element, new Point(1,1),3,Emgu.CV.CvEnum.BorderType.Default, new MCvScalar(0, 0, 0));21//腐蚀当Struct_element模型创建不合理或者膨胀腐蚀次数较⼤时可能图像会发⽣偏移22 CvInvoke.Erode(bw, bw, Struct_element, new Point(-1, -1), 3,Emgu.CV.CvEnum.BorderType.Default, new MCvScalar(0, 0, 0));23//轮廓提取24 VectorOfVectorOfPoint contours = new VectorOfVectorOfPoint();25//筛选后26 CvInvoke.FindContours(bw, contours, null, Emgu.CV.CvEnum.RetrType.List, Emgu.CV.CvEnum.ChainApproxMethod.ChainApproxSimple);27int ksize = contours.Size;//获取连通区域的个数。

MTK层的结构认识

MTK层的结构认识

MTK 中大部分有两个层构成,基层和背景层,其中待机的背景层为墙纸层在dm_layers中的顺序是背景在第0个,基层在第一个,但是创建的时候,是先创建基层,再创建背景层,因为在进入屏幕的时候,就已经创建了基层。

dm_layers记录层的handle,dm_layers_count为 DM层的当前个数,不能超过4,刷新的时墙纸层:dm_wallpaper_layer_idx 为墙纸层的索引ID,通过这个ID在dm_layers中找到墙纸层在 CustCoordinates.c中,设置了DM_WALL_PAPER属性的化,会通过 dm_setup_and_dr 来建立墙纸层,通过 dm_get_wallpaper_layer 来获取墙纸层,其中并没有设置一个全来保存墙纸层,而是通过ID来索引。

在 dm_setup_and_draw_wallpaper 中通过 mmi_phnset_check_themeid_wallpaper 判主题的话,采用 gdi_layer_create创建,否则用 gdi_layer_create_cf创建,并把创建让后通过 dm_layers[dm_layers_count] = dm_new_layers 把墙纸层放到dm_layers中然后dm_wallpaper_layer_idx = dm_layers_count - 1 ,记录墙纸层索引,之后通过普通背景层:g_dm_scr_bg_yer_handle 为背景层的 layer_handle在CustCoordinates.c中 ,设置了DM_SCR_BG 就会通过调用 dm_setup_and_draw_scr_通过 dm_layers[0] = g_dm_scr_bg_yer_handle 来设置dm_layers 与墙纸层有这个层也是要新建立的通过 gdi_layer_create(0, 0, UI_device_width, UI_device_height, &g_dm_scr_bg 建立层,让后通过 dm_draw_scr_bg_image 来画背景,通过 dm_get_current_scr_bg_分rotated_bkg_filler 或者 main_menu_bkg_filler 或者special_screen_bkg_fille 基础层:在DM中 通过DM_BASE_LAYER_START,进入dm_setup_base_layer调用 gdi_layer_get_base_handle(&dm_layers[dm_layers_count++]) 来获取基础层,注意这个地方并没有创建新层。

qimage 获取裸数据的函数

qimage 获取裸数据的函数

QImage是Qt框架中的一个用于处理图像的类,它提供了许多函数来获取和操作图像的数据。

在本文中,我们将重点介绍QImage中用于获取裸数据的函数。

QImage提供了如下几个函数来获取图像的裸数据:1. bits()bits()函数返回一个指向图像像素数据的指针。

这个指针指向的是图像数据的首位置区域,可以通过它来直接访问和修改图像的像素数据。

需要注意的是,bits()函数返回的指针是一个无符号字符指针,因此在对图像数据进行操作时需要小心类型转换和指针运算。

2. constBits()constBits()函数与bits()函数类似,也是返回一个指向图像像素数据的指针。

不同之处在于,constBits()函数返回的是一个常量指针,意味着通过这个指针只能读取图像数据,而不能修改。

这在一些只读操作时非常有用。

3. scanLine()scanLine()函数返回图像的一行像素数据。

它的参数是行号,表示要获取的像素数据所在的行。

通过scanLine()函数可以直接获取某一行的像素数据,而无需遍历整个图像。

以上这些函数都提供了直接访问图像裸数据的方法,适用于对图像数据进行底层操作的场合。

在图像处理、图像分析、图像格式转换等场景中,这些函数可以帮助我们高效地获取和修改图像数据。

需要注意的是,使用这些函数需要谨慎对待图像数据的格式和排列方式。

由于不同的图像格式和位深度会对数据的排列方式产生影响,因此在使用这些函数时需要确保对图像数据的理解和处理是正确的。

除了获取裸数据的函数外,QImage还提供了许多其他用于图像操作的函数,比如加载图像、保存图像、缩放图像、旋转图像等等。

在使用QImage时,需要根据具体的需求选择合适的函数,以便高效地进行图像处理。

QImage提供了丰富的函数来获取和操作图像的裸数据,这为我们在Qt框架中进行图像处理提供了很大的便利。

在实际的开发中,建议充分了解QImage的相关函数,以便能够更好地利用这些函数来处理图像数据。

MTK知识点小结

MTK知识点小结

1.KAL‎是封装内核‎的层应当在‎O SL以上‎来开发,K‎A L OS‎层为Med‎i aTek‎‟s软件和‎N ucle‎u s操作系‎统的接口。

‎它为任务提‎供许多系统‎服务函数,‎比如计时器‎,队列,内‎存管理,事‎件等等。

‎Task‎是有一定封‎装性的软件‎模块,当此‎模块被执行‎的时候,可‎以把它理解‎为一个独立‎的线程。

T‎a sk之间‎的交流可以‎理解成线程‎间通信。

大‎家以后可能‎要独立完成‎一个tas‎k的设计,‎以应付一些‎比较高级的‎应用开发。

‎2.t‎a sk的创‎建:MT‎K提供了自‎定义tas‎k的接口,‎首先要在c‎u stom‎_conf‎i g.h文‎件中的cu‎s tom_‎t ask_‎i ndx_‎t ype和‎c usto‎m_mod‎u le_t‎y pe这两‎个枚举类型‎中分别加入‎我们自己的‎t ask_‎i ndex‎和modu‎l e id‎。

其次在‎c usto‎m_con‎f ig.c‎中的cus‎t om_m‎o d_ta‎s k_g[‎]这个数组‎中定义中增‎加moud‎l e与ta‎s k的映射‎。

需要注意‎这个数组的‎成员个数不‎能超MAX‎_CUST‎O M_MO‎D S,即M‎T K只支持‎16个自定‎义task‎。

然后‎需要在ta‎s k配置表‎c usto‎m_com‎p_con‎f ig_t‎b l[]中‎增加tas‎k的配置信‎息。

这个结‎构体的成员‎组成如下:‎type‎d ef s‎t ruct‎{‎ kal‎_char‎‎‎ *c‎o mp_n‎a me_p‎t r; /‎/task‎名称‎ kal‎_char‎‎‎ *c‎o mp_q‎n ame_‎p tr;/‎/外部队列‎名称‎ kal‎_uint‎32 ‎‎ co‎m p_pr‎i orit‎y;//t‎a sk优先‎级‎kal_‎u int1‎6‎‎ com‎p_sta‎c k_si‎z e;//‎t ask堆‎栈大小‎ ka‎l_uin‎t8 ‎‎ c‎o mp_e‎x t_qs‎i ze;/‎/外部队列‎大小‎ kal‎_uint‎8‎‎ co‎m p_in‎t_qsi‎z e;//‎内部队列大‎小‎kal_‎c reat‎e_fun‎c_ptr‎ c‎o mp_c‎r eate‎_func‎;//创建‎t ask的‎入口函数‎k‎a l_bo‎o l ‎‎‎c omp_‎i nter‎n al_r‎a m_st‎a ck;‎} co‎m ptas‎k_inf‎o_str‎u ct;‎接下‎来是比较关‎键的tas‎k创建函数‎的实现。

从MTK的BIN文件里提取图片资源

从MTK的BIN文件里提取图片资源
{
is_pic = 1;
break;
}
if(buffer[i+bmp_file_len+j]==0&&buffer[i+bmp_file_len+j] ==0x3B)
{
is_pic = 2;
break;
}
fclose(pPicF);
gif_index++;
i = i+bmp_file_len-1;
}
is_pic =0;
}
}
i = 0;
//bmp
bmp_index = 0;
while(i++ < len+1)
}
}
if(is_pic>1)
bmp_file_len = bmp_file_len+j;
函数实现如下,由于整个过程已经写出,所以不再过多讲解:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const unsigned char BMP_HEAD[2] = {0x42,0x4D};
const unsigned char GIF_HEAD[6] = {0x47,0x49,0x46,0x38,0x39,0x61};
MTK手机软件是一个二进制的BIN文件,最近一段时间来,很多人都在动BIN文件的脑筋,希望通过直接修改BIN达到修改软件的目的.有人写了资源提取工具,有人写了直接修改手机语言的工具,总之MTK平台售后服务工具层出不穷.于是常常被别人请教这些工具是怎么实现的.这倒让我有些为难了,简单一些来说,他们都是靠分析BIN得操作的.不过面对一大堆混乱的字符,要分析他们可不是一件容易的事.一般来说,由于二进制文件在生成的过程中编译系统对他们执行了一些对齐的操作,而我们通常使用的编辑软件都只能一个一个字节的把文件内容如实显示出来,他可不管这个字节是和那个字节对齐还是和别的字节合成有意义的字符,所以即使你定义的字串常量,也有可能在你所使用的编辑器里变成你不认识的东东.这就给我们解析BIN文件造成很大的麻烦.所幸这个麻烦并不是不可克服的.

mtk平台函数

mtk平台函数

DIARYMTK 2010-06-07 14:07:18 阅读90 评论0 字号:大中小May.19LCD移植static const s_lcd_probe gLcdProbe[] = {...{"ILI9328", LCD_IsILI9328, &LCD_func_ILI9328},{"LP4948", NULL, &LCD_func_LP4948},}原来{"LP4948", NULL, &LCD_func_LP4948},放在{"ILI9328", LCD_IsILI9328, &LCD_func_ILI9328},前面导致开机白屏,原因是void LCD_FunConfigNew(void){#if 1kal_uint32 i;for (i = 0; i < LCD_PROBE_NUM; i ++) {if ((gLcdProbe[i].lcd_probe == NULL) || (KAL_TRUE == (gLcdProbe[i].lcd_probe)())) {break;}}gLcdSeq = i;MainLCD = gLcdProbe[gLcdSeq].lcd_func;#endif// MainLCD = &LCD_func_ILI9225;}当走到"LP4948"项时,由于其对应的lcd_probe为"NULL",导致退出循环,使得LCD相应的功能函数都指向"LP4948"对应的函数。

双卡改单卡。

SINGLE_SIM_MMI_ONLY某个菜单项STR_ID不显示。

原来是其子菜单个数与实际个数不相符。

键盘定义Custom/drv/Drv_tool/DrvGen.exeCustom/drv/misc_drv/MT6225_08A_GEMMI_BB/Codegen/codegen.dws分布式编译某个模块出问题了。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、S32 gdi_image_draw_id(S32 offset_x, S32
offset_y, U16 image_id);
offset_x和offset_y 是图片左上角的坐标,image_id是指向图片的枚举类
型,
用法如下:
ADD_APPLICATION_IMAGE(MAIN_MENU_MA TRIX_PHONEBOOK_ICON,CUST_IM
G_PATH"\\\\MainLCD\\\\MainMenu\\\\MATRIX\\\\MM_PB.gif");
2、S32 gdi_image_draw(S32 offset_x, S32 offset_y, U8 *image_ptr);
Image_ptr是用file2hex.exe转化后的图片文件名;
在MTK平台里,image_ptr = (U8*)GetImage(image_id);
3、S32 gdi_image_draw_file(S32 offset_x, S32 offset_y, S8
*image_name);
Image_name是图片的文件名;
4、S32 gdi_image_get_dimension_id(U16 image_id, S32 *width, S32
*height);
S32 gdi_image_get_dimension_file(S8 *image_name, S32 *width, S32
*height);
S32 gdi_image_get_dimension(U8 *image_ptr, S32 *width, S32 *height);
获得图片的长宽参数
5、S32 gdi_image_get_frame_count_id(U16 image_id, S32 *frame_count); S32 gdi_image_get_frame_count_id(U16 image_id, S32 *frame_count);
获得动态图片的帧数
画点函数;
6、void UI_putpixel(s32 x,s32 y,color c);
7、关于剪切矩形:
void UI_set_clip(s32 x1,s32 y1,s32 x2,s32 y2);
void UI_reset_clip(void);
void UI_pop_clip(void);
void UI_set_text_clip(s32 x1,s32 y1,s32 x2,s32 y2);
void UI_reset_text_clip(void);
void UI_pop_text_clip(void);
画线函数;
颜色为c的一条直线:
void UI_line(s32 x1,s32 y1,s32 x2,s32 y2,color c);
颜色为c,宽度为w的一条直线:
void UI_wline(s32 x1,s32 y1,s32 x2,s32 y2,color c,s32 w);
画一个空心矩形:
void UI_draw_rectangle(s32 x1,s32 y1,s32 x2,s32 y2,color c); 填充一个矩形:
void UI_fill_rectangle(s32 x1,s32 y1,s32 x2,s32 y2,color c); 画图区域控制函数:
void UI_lock_double_buffer(void);
void UI_unlock_double_buffer(void);
void UI_BLT_double_buffer(s32 x1, s32 y1, s32 x2 , s32 y2); 文字输出有关的函数:
设置字符显示区:
void UI_set_text_clip(s32 x1,s32 y1,s32 x2,s32 y2);
设置字体颜色:
void UI_set_text_color(color c);
设置字体边框颜色:
void UI_set_text_border_color(color c);
设置当前光标位置:
void UI_move_text_cursor(s32 x,s32 y);
获取字符串的长、宽参数:
void UI_measure_string(UI_string_type text,s32 *width,s32 *height);
获得单个字符的长、宽参数:
void UI_measure_character(UI_character_type c,s32 *width,s32
*height);
输出字符串:
void UI_print_text(UI_string_type text);
输出一个字符:
void UI_print_character(UI_character_type c);
字符串求长:
U16 UTF8Strlen(U8 *p);
字符串操作函数:
字符串查找:strstr
字符串拷贝:strcpy
字符串定长拷贝:strncpy
字符串比较:strcmp
字符串定长比较:strncmp
字符串续接:strcat
字符串定长续接:strncat
字符串转化为整型函数:atoi
整型转化为字符串函数:itoa
关于层
建立一个层:
GDI_RESULT dm_create_layer_using_outside_memory(S32 x, S32 y, S32 width, S32 height, gdi_handle **handle_ptr, U8 *outside_memory, S32 outside_memory_size, U32 flags);
MTK平台上,软件支持四层。

获取base layer,即最下面的层:
GDI_RESULT gdi_layer_get_base_handle(gdi_handle *handle_ptr);
将层压栈并激活,执行此条语句后,可以对该层操作,
void gdi_layer_push_and_set_active(gdi_handle handle);
操作完成后,用下面的函数让该层出栈:
void gdi_layer_pop_and_restore_active(void);
最后用函数
GDI_RESULT gdi_layer_set_blt_layer_ext(gdi_handle handle0,
gdi_handle handle1, gdi_handle handle2, gdi_handle handle3)将层从下到上显示出来。

设置层透明色:
GDI_RESULT gdi_layer_set_source_key(BOOL
source_key_enable,gdi_color source_key_value);
调试信息输出函数:
kal_prompt_trace。

相关文档
最新文档