FHD : full high definition,1920 x 1080,全高清

vendor/mediatek/proprietary/bootable/bootloader/lk/dev/logo/update  // 這隻檔主要負責將關機充電動畫所需要的全部小圖示及第1個開機logo(fhd_uboot.bmp)由 bmp_to_raw 做轉檔,從 .bmp 轉成 .raw,再使用 zpipe 將這些.raw 集結起來壓縮成一個檔 fhd.raw
   #!/bin/bash
if [ "$1" = "" ]; then // 這個 project 使用的是 fhd。
echo "Please input resolution,"
echo "Such as: qvga, wqvga, wvga, hvga"
exit
fi
p=$1 // ${p} = fhd
./tool/bmp_to_raw ./temp0.raw ./$p/"${p}_uboot".bmp
./tool/bmp_to_raw ./temp1.raw ./$p/"${p}_battery".bmp
./tool/bmp_to_raw ./temp2.raw ./$p/"${p}_low_battery".bmp
./tool/bmp_to_raw ./temp3.raw ./$p/"${p}_charger_ov".bmp
./tool/bmp_to_raw ./temp4.raw ./$p/"${p}_num_0".bmp
./tool/bmp_to_raw ./temp5.raw ./$p/"${p}_num_1".bmp
./tool/bmp_to_raw ./temp6.raw ./$p/"${p}_num_2".bmp
./tool/bmp_to_raw ./temp7.raw ./$p/"${p}_num_3".bmp
./tool/bmp_to_raw ./temp8.raw ./$p/"${p}_num_4".bmp
./tool/bmp_to_raw ./temp9.raw ./$p/"${p}_num_5".bmp
./tool/bmp_to_raw ./temp10.raw ./$p/"${p}_num_6".bmp
./tool/bmp_to_raw ./temp11.raw ./$p/"${p}_num_7".bmp
./tool/bmp_to_raw ./temp12.raw ./$p/"${p}_num_8".bmp
./tool/bmp_to_raw ./temp13.raw ./$p/"${p}_num_9".bmp
./tool/bmp_to_raw ./temp14.raw ./$p/"${p}_num_percent".bmp
./tool/bmp_to_raw ./temp15.raw ./$p/"${p}_bat_animation_01".bmp
./tool/bmp_to_raw ./temp16.raw ./$p/"${p}_bat_animation_02".bmp
./tool/bmp_to_raw ./temp17.raw ./$p/"${p}_bat_animation_03".bmp
./tool/bmp_to_raw ./temp18.raw ./$p/"${p}_bat_animation_04".bmp
./tool/bmp_to_raw ./temp19.raw ./$p/"${p}_bat_animation_05".bmp
./tool/bmp_to_raw ./temp20.raw ./$p/"${p}_bat_animation_06".bmp
./tool/bmp_to_raw ./temp21.raw ./$p/"${p}_bat_animation_07".bmp
./tool/bmp_to_raw ./temp22.raw ./$p/"${p}_bat_animation_08".bmp
./tool/bmp_to_raw ./temp23.raw ./$p/"${p}_bat_animation_09".bmp
./tool/bmp_to_raw ./temp24.raw ./$p/"${p}_bat_animation_10".bmp
./tool/bmp_to_raw ./temp25.raw ./$p/"${p}_bat_10_01".bmp
./tool/bmp_to_raw ./temp26.raw ./$p/"${p}_bat_10_02".bmp
./tool/bmp_to_raw ./temp27.raw ./$p/"${p}_bat_10_03".bmp
./tool/bmp_to_raw ./temp28.raw ./$p/"${p}_bat_10_04".bmp
./tool/bmp_to_raw ./temp29.raw ./$p/"${p}_bat_10_05".bmp
./tool/bmp_to_raw ./temp30.raw ./$p/"${p}_bat_10_06".bmp
./tool/bmp_to_raw ./temp31.raw ./$p/"${p}_bat_10_07".bmp
./tool/bmp_to_raw ./temp32.raw ./$p/"${p}_bat_10_08".bmp
./tool/bmp_to_raw ./temp33.raw ./$p/"${p}_bat_10_09".bmp
./tool/bmp_to_raw ./temp34.raw ./$p/"${p}_bat_10_10".bmp
./tool/bmp_to_raw ./temp35.raw ./$p/"${p}_bat_bg".bmp
./tool/bmp_to_raw ./temp36.raw ./$p/"${p}_bat_img".bmp
./tool/bmp_to_raw ./temp37.raw ./$p/"${p}_bat_100".bmp
./tool/bmp_to_raw ./boot_logo ./$p/"${p}_kernel".bmp
./tool/zpipe -l ./"${p}.raw" temp0.raw temp1.raw temp2.raw temp3.raw temp4.raw temp5.raw temp6.raw temp7.raw temp8.raw temp9.raw temp10.raw temp11.raw temp12.raw temp13.raw temp14.raw temp15.raw temp16.raw temp17.raw temp18.raw temp19.raw temp20.raw temp21.raw temp22.raw temp23.raw temp24.raw temp25.raw temp26.raw temp27.r aw temp28.raw temp29.raw temp30.raw temp31.raw temp32.raw temp33.raw temp34.raw temp35.raw temp36.raw temp37.raw
rm -rf ./temp0.raw ./temp1.raw ./temp2.raw ./temp3.raw ./temp4.raw ./temp5.raw ./temp6.raw ./temp7.raw ./temp8.raw ./temp9.raw ./temp10.raw ./temp11.raw ./temp12.raw ./temp13.raw ./temp14.raw ./temp15.raw ./temp16.raw ./temp17.raw ./temp18.raw ./temp19.raw ./temp20.raw ./temp21.raw ./temp22.raw ./temp23.raw ./temp24.raw ./te mp25.raw ./temp26.raw ./temp27.raw ./temp28.raw ./temp29.raw ./temp30.raw ./temp31.raw ./temp32.raw ./temp33.raw ./temp34.raw ./temp35.raw ./temp36.raw ./temp37.raw ./bootlogo.raw
echo "conversion finished"
以下是 bmp 轉成 raw 檔後,在 bin 檔的排列順序,
之後需指定排列順序方可將圖片取出 ...
...
... ifeq ($(strip $(SUPPORT_CARRIEREXPRESS_PACK)),yes)
RESOLUTION := $(word $(COUNT),$(TEMP))
RESOURCE_OBJ_LIST := \
$(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_uboot.raw
else
RESOURCE_OBJ_LIST := \
$(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_uboot.raw
endif
ifneq ($(strip $(MACH_TYPE)), )
ifneq ($(strip $(MTK_ALPS_BOX_SUPPORT)), yes)
RESOURCE_OBJ_LIST += \
$(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_low_battery.raw \
$(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_low_power_no_charger.raw \
# $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_1_pixel.raw
# $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_kernel.raw \
# $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_charger_ov.raw \
# $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_num_0.raw \
# $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_num_1.raw \
# $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_num_2.raw \
# $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_num_3.raw \
# $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_num_4.raw \
# $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_num_5.raw \
# $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_num_6.raw \
# $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_num_7.raw \
# $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_num_8.raw \
# $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_num_9.raw \
# $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_num_percent.raw \
# $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_animation_01.raw \
# $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_animation_02.raw \
# $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_animation_03.raw \
# $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_animation_04.raw \
# $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_animation_05.raw \
# $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_animation_06.raw \
# $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_animation_07.raw \
# $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_animation_08.raw \
# $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_animation_09.raw \
# $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_animation_10.raw \
# $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_10_01.raw \
# $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_10_02.raw \
# $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_10_03.raw \
# $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_10_04.raw \
# $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_10_05.raw \
# $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_10_06.raw \
# $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_10_07.raw \
# $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_10_08.raw \
# $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_10_09.raw \
# $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_10_10.raw \
# $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_bg.raw \
# $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_img.raw \
# $(BOOT_LOGO_DIR)/$(BASE_LOGO)/$(BASE_LOGO)_bat_100.raw \
# $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_kernel.raw \
endif
endif
...
...
...
alps/vendor/mediatek/proprietary/external/libshowlogo / show_animation_common.c
...
...
... #if 0
// original code
#else // 整個電池容量分成 7 個圖片往上貼,讓其有往上充電的感覺
// 以下這個 function 是自已寫的用來取得在當時的容量所對應的 scale base
// ex: 若 capacity 在 54,則取得第3個動畫貼片,然後依序往上貼到第6個,再取得當時的 capacity 所對應的 scale base,再依序重復。
// 此算法使用了二分法,讓比較次數限制在 3 次內,以優化整個顯示時間。
unsigned int check_animation_scale_base(unsigned int capacity)
{
//
// 100% : 6
// 84% ~ 99% : 5
// 67% ~ 83% : 4
// 50% ~ 66% : 3
// 33% ~ 49% : 2
// 16% ~ 32% : 1
// 0% ~ 15% : 0
// if(capacity >= )
if(capacity >= )
if(capacity == )
return ;
else
return ;
else
if(capacity >= )
return ;
else
return ;
else
if(capacity >= )
if(capacity >= )
return ;
else
return ;
else
return ;
} //
// fill_addr : framebuffer address
// dec_logo_addr : 解壓縮後的 logo address
// logo_addr : logo 在壓縮檔內的 address, 您也可以將常用的小圖示如 number 先行壓縮成數據再直接 include 進來,則 logo_addr 就改成 壓縮後的數據的變數名。
//
void fill_animation_battery_new_ex(unsigned int capacity, void *fill_addr, void * dec_logo_addr, void * logo_addr,
LCM_SCREEN_T phical_screen)
{
unsigned int animation_scale_base = ;
static unsigned int animation_scale_offset = ; if (capacity > ) capacity = ;

// 底圖
fill_animation_logo(ANIM_V0_BACKGROUND_INDEX, fill_addr, dec_logo_addr, logo_addr,phical_screen); RECT_REGION_T rect = {STATE_LEFT, STATE_TOP, STATE_RIGHT, STATE_BOTTOM};
switch (g_batNotifyCode) {
case 0x0002: case 0x0020: case 0x0040: case 0x0080: //Temperatures
fill_animation_dynamic(, rect, fill_addr, dec_logo_addr, logo_addr, phical_screen);
} //
// display a digit in hundreds
//
if (capacity == ) {
fill_animation_number(NUMBER_PIC_START_0+, -, fill_addr, logo_addr, phical_screen);
} //
// display a digit in tens
//
if (capacity == ) {
fill_animation_number(NUMBER_PIC_START_0, , fill_addr, logo_addr, phical_screen);
} else if (capacity >= ) {
fill_animation_number(NUMBER_PIC_START_0 + (capacity/), , fill_addr, logo_addr, phical_screen);
} //
// display a digit in ones
//
fill_animation_number(NUMBER_PIC_START_0 + (capacity%), , fill_addr, logo_addr, phical_screen); //
// display % symbol
//
fill_animation_dynamic(NUMBER_PIC_PERCENT, percent_location_rect, fill_addr, percent_pic_addr, logo_addr, phical_screen); //
// scale animation position.
//
rect.left = BATTERY_LEFT;
rect.top = BATTERY_TOP;
rect.right = BATTERY_RIGHT;
rect.bottom = BATTERY_BOTTOM; //
// scale animation
//
animation_scale_base = check_animation_scale_base(capacity);
if (animation_scale_base + animation_scale_offset > )
animation_scale_offset = ;
fill_animation_dynamic(SCALE_PIC_START_0 + animation_scale_base + animation_scale_offset, rect, fill_addr, dec_logo_addr, logo_addr, phical_screen);
animation_scale_offset++; }
#endif ...
...
...

logo.bin

      :   130d  6c6f 676f    ...X...logo....
: ................
: ffff ffff ffff ffff ................
: ...X............
: ................
: ffff ffff ffff ffff ffff ffff ffff ffff ................
: ffff ffff ffff ffff ffff ffff ffff ffff ................
: ffff ffff ffff ffff ffff ffff ffff ffff ................
: ffff ffff ffff ffff ffff ffff ffff ffff ................
: ffff ffff ffff ffff ffff ffff ffff ffff ................
00000a0: ffff ffff ffff ffff ffff ffff ffff ffff ................
00000b0: ffff ffff ffff ffff ffff ffff ffff ffff ................
00000c0: ffff ffff ffff ffff ffff ffff ffff ffff ................
00000d0: ffff ffff ffff ffff ffff ffff ffff ffff ................
00000e0: ffff ffff ffff ffff ffff ffff ffff ffff ................
00000f0: ffff ffff ffff ffff ffff ffff ffff ffff ................
: ffff ffff ffff ffff ffff ffff ffff ffff ................
: ffff ffff ffff ffff ffff ffff ffff ffff ................
: ffff ffff ffff ffff ffff ffff ffff ffff ................
: ffff ffff ffff ffff ffff ffff ffff ffff ................
: ffff ffff ffff ffff ffff ffff ffff ffff ................
: ffff ffff ffff ffff ffff ffff ffff ffff ................
: ffff ffff ffff ffff ffff ffff ffff ffff ................
: ffff ffff ffff ffff ffff ffff ffff ffff ................
: ffff ffff ffff ffff ffff ffff ffff ffff ................
: ffff ffff ffff ffff ffff ffff ffff ffff ................
00001a0: ffff ffff ffff ffff ffff ffff ffff ffff ................
00001b0: ffff ffff ffff ffff ffff ffff ffff ffff ................
00001c0: ffff ffff ffff ffff ffff ffff ffff ffff ................
00001d0: ffff ffff ffff ffff ffff ffff ffff ffff ................
00001e0: ffff ffff ffff ffff ffff ffff ffff ffff ................
00001f0: ffff ffff ffff ffff ffff ffff ffff ffff ................
: 130d ec00 5e71 ..........^q..
: 3aa6 0c00 0d00 b0d1 0e00 72d5 0e00 :...5X......r...
: 9cd6 0e00 1cda 0e00 86de 0e00 3ee1 0e00 ............>...
: 38e5 0e00 ece9 0e00 11ec 0e00 24f1 0e00 ...........$...
: eff5 0e00 85fb 0e00 0f00 0f00 ............h3..
: 4e50 0f00 3d6a 0f00 0f00 0f00 NP..=j..!...s...
: 2eb3 0f00 4ccf 0f00 f2eb 0f00 dd07 ....L...........
: 51a3 3e43 62e3 2d7e Q...>C..b...-~..
: 1c16 e4ac 8f46 4ae4 .........F..J...
: 7d83 3b22 2daa 5fac }...;"..-..._...
00002a0: 0d48 0cbb a127 1b00 55dd 1d00 .H.......'..U...
.....................................................................
.....................................................................
.....................................................................
0300ee0: EQ.EQ.EQ.EQ.EQ.E
0300ef0: Q.EQ.EQ.EQ.EQ.EQ
0300f00: 9a7f .EQ.EQ.EQ.E9...g
0300f10: 0c47 cf00 .G..............
0300f20: 0a

0x200 = 00000039,代表這個 logo.bin 由39 個圖片組成。

0x204 = 00300d13,代表這個 logo.bin 的 length,

0x300F20 代表 logo.bin 的 bytes size

但為什麼 300d13 和 300f20 不一致呢?

是否是因為加了其它資訊?

0x300F20 - 0x300d13 = 0x20D

待解決?

待續!


關機充電動畫如以下4張,

特地將會變動的水波紋獨立出來看較易理解。

下面是在描述 畫數字及電池容量圖案的 LCM 上的啟始點。

 #if defined(FHD) || defined(CU_FHD) || defined(CMCC_FHD) || defined(CT_FHD) || defined(CMCC_LTE_FHD) || defined(CT_LTE_FHD) || defined(CU_LTE_FHD)
// fhd 1080*1920 // battery capacity rectangle
#define CAPACITY_LEFT (387) // battery capacity center
#define CAPACITY_TOP (802)
#define CAPACITY_RIGHT (691)
#define CAPACITY_BOTTOM (1292) // first number rectangle
#define NUMBER_LEFT (351+84) // number
#define NUMBER_TOP (479)
#define NUMBER_RIGHT (435+84)
#define NUMBER_BOTTOM (600) // % rectangle
#define PERCENT_LEFT (519+84) // percent number_left + 2*number_width
#define PERCENT_TOP (479)
#define PERCENT_RIGHT (627+84)
#define PERCENT_BOTTOM (600) // top animation part
// youchihwang
#define TOP_ANIMATION_LEFT (387) // top animation
#define TOP_ANIMATION_TOP (100)
#define TOP_ANIMATION_RIGHT (691)
#define TOP_ANIMATION_BOTTOM (152)
         // battery capacity rectangle
#define CAPACITY_LEFT (387) // battery capacity center
#define CAPACITY_TOP (802)
#define CAPACITY_RIGHT (691)
#define CAPACITY_BOTTOM (1292)

         // first number rectangle
#define NUMBER_LEFT (351+84) // number
#define NUMBER_TOP (479)
#define NUMBER_RIGHT (435+84)
#define NUMBER_BOTTOM (600)

         // %  rectangle
#define PERCENT_LEFT (519+84) // percent number_left + 2*number_width
#define PERCENT_TOP (479)
#define PERCENT_RIGHT (627+84)
#define PERCENT_BOTTOM (600)

這是水波紋動畫的大小size,不是啟始點。

         // top animation part
#define TOP_ANIMATION_LEFT (387) // top animation
#define TOP_ANIMATION_TOP (100)
#define TOP_ANIMATION_RIGHT (691)
#define TOP_ANIMATION_BOTTOM (152)

linux_repo/vendor/mediatek/proprietary/external/libshowlogo/show_animation_common.c

  /*
67 * Check logo.bin address if valid, and get logo related info
68 *
69 */
int check_logo_index_valid(unsigned int index, void * logo_addr, LOGO_PARA_T * logo_info)
{
unsigned int *pinfo = (unsigned int*)logo_addr;
logo_info->logonum = pinfo[]; SLOGD("[show_animation_common: %s %d]logonum =%d, index =%d\n", __FUNCTION__,__LINE__,logo_info->logonum, index);
if (index >= logo_info->logonum)
{
SLOGE("[show_animation_common: %s %d]unsupported logo, index =%d\n", __FUNCTION__,__LINE__, index);
return CHECK_LOGO_BIN_ERROR; }
// SLOGD("show_animation_common, pinfo[1]=%d, pinfo[2+index]=%d, pinfo[3+index]=%d, pinfo[3+index] - pinfo[2+index]= %d, pinfo[1] - pinfo[2+index] =%d \n",
// pinfo[1],pinfo[2+index],pinfo[3+index], pinfo[3+index] - pinfo[2+index],pinfo[1] - pinfo[2+index]); if(index < logo_info->logonum - ) //
// ex:以第5張圖為例,
// logolen = pinfo[3+5] - pinfo[2+5]
// 以上算法是屬於相對的,
// 原先假設 pinfo[2+5] 是 壓縮檔裡picture 4 data 的 end address.
// 原先假設 pinfo[3+5] 是 壓縮檔裡picture 5 data 的 end address.
// 相減 為 壓縮檔裡picture 5 data 的長度,
// 但看了 90 行的code,推理 pinfo[2+5] 應是壓縮檔裡 picture 5 data 在 logo.bin 的相對啟始位置。
// 所以 pinfo[3+5] 則是 壓縮檔裡picture 5 data 在 logo.bin 的相對啟始位置。
//
logo_info->logolen = pinfo[+index] - pinfo[+index];
else
logo_info->logolen = pinfo[] - pinfo[+index];

//
// 取出 picture 的 raw data,
// logo_addr :壓縮檔 logo.bin 在系統的啟始位置
// pinfo[2+index] :第 index 圖在壓縮檔 logo.bin 的相對啟始位置
// logo_addr + pinfo[2+index]:第 index 圖在整個系統的啟始位置
logo_info->inaddr = (unsigned int)logo_addr + pinfo[+index];
SLOGD("show_animation_common, in_addr=0x%08x, logolen=%d\n",
logo_info->inaddr, logo_info->logolen); return CHECK_LOGO_BIN_OK;
}
linux_repo/vendor/mediatek/proprietary/external/libshowlogo/show_animation_common.c

  /*
99 * Fill a screen size buffer with logo content
100 *
101 */
void fill_animation_logo(unsigned int index, void *fill_addr, void * dec_logo_addr, void * logo_addr, LCM_SCREEN_T phical_screen)
{
LOGO_PARA_T logo_info;
int logo_width;
int logo_height;
int raw_data_size;
if(check_logo_index_valid(index, logo_addr, &logo_info) != CHECK_LOGO_BIN_OK)
return;

//
// decompress_logo (in, out, in_length, out_length)
//
raw_data_size = decompress_logo((void*)logo_info.inaddr, dec_logo_addr, logo_info.logolen, phical_screen.fb_size);
//RECT_REGION_T rect = {0, 0, phical_screen.width, phical_screen.height};
logo_width =phical_screen.width;
logo_height = phical_screen.height;
if (phical_screen.rotation == || phical_screen.rotation == ) {
logo_width =phical_screen.height;
logo_height = phical_screen.width;
}
if ( == bits) {
if (raw_data_size == logo_width*logo_height*) {
bits = ;
} else if (raw_data_size == logo_width*logo_height*) {
bits = ;
} else {
SLOGE("[show_animation_common: %s %d]Logo data error\n",__FUNCTION__,__LINE__);
return;
}
SLOGD("[show_animation_common: %s %d]bits = %d\n",__FUNCTION__,__LINE__, bits);
}

//
// 以下代表,要填入的 rectangle 的長度與寬度,
// 因為 fill_animation_logo() 是將整張圖片顯示出來,
// 所以 起始點是從 0,0 開始到整個 panel 的寬度與長度。
// RECT_REGION_T rect = {左,上,右,下}
//
RECT_REGION_T rect = {, , logo_width, logo_height}; fill_rect_with_content(fill_addr, rect, dec_logo_addr, phical_screen, bits); }

繼續編輯

待續

charing animation的更多相关文章

  1. CSS 3学习——animation动画

    以下内容根据官方文档翻译以及自己的理解整理. 1.  介绍 本方案介绍动画(animations).通过动画,开发者可以将CSS属性值的变化指定为一个随时间变化的关键帧(keyframes)的集合.在 ...

  2. 虾扯蛋:Android View动画 Animation不完全解析

    本文结合一些周知的概念和源码片段,对View动画的工作原理进行挖掘和分析.以下不是对源码一丝不苟的分析过程,只是以搞清楚Animation的执行过程.如何被周期性调用为目标粗略分析下相关方法的执行细节 ...

  3. 实现了一个百度首页的彩蛋——CSS3 Animation简介

    在百度搜索中有这样一个彩蛋:搜索“旋转”,“跳跃”,“反转”等词语,会出现相应的动画效果(搜索“反转”后的效果).查看源码可以发现,这些效果正是通过CSS3的animation属性实现的. 实现这个彩 ...

  4. 深入理解CSS3 Animation 帧动画

    CSS3我在5年之前就有用了,包括公司项目都一直在很前沿的技术. 最近在写慕课网的七夕主题,用了大量的CSS3动画,但是真的沉淀下来仔细的去深入CSS3动画的各个属性发现还是很深的,这里就写下关于帧动 ...

  5. Android动画效果之Property Animation进阶(属性动画)

    前言: 前面初步认识了Android的Property Animation(属性动画)Android动画效果之初识Property Animation(属性动画)(三),并且利用属性动画简单了补间动画 ...

  6. Android动画效果之初识Property Animation(属性动画)

    前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...

  7. Android动画效果之Frame Animation(逐帧动画)

    前言: 上一篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画),今天来总结下Android的另外一种动画Frame ...

  8. Android动画效果之Tween Animation(补间动画)

    前言: 最近公司项目下个版本迭代里面设计了很多动画效果,在以往的项目中开发中也会经常用到动画,所以在公司下个版本迭代开始之前,抽空总结一下Android动画.今天主要总结Tween Animation ...

  9. 谈谈iOS Animation

    零.前言 这里没有太多的代码细节,只是探索iOS动画的基本概念,以及其抽象模型,数学基础等.我们学习一个知识的时候一般有两个部分,抽象部分和形象部分,抽象好比语言的语法,是规则,形象好比具体的句子,可 ...

随机推荐

  1. IBatisNet -- 保护你的配置文件及映射文件信息

    通常情况下我们在使用IBatisNet的时候,配置文件和映射文件都是暴露在外的,如果能进入到服务器,那么你的程序的操作数据库的SQL语句,数据库连接字符串等信息都将很轻松的被看到,这样是很危险的.然而 ...

  2. stream_set_timeout (fread 造成了php程序timeout)

    最近在执行fread时候,php出现了 "Fatal error: Maximum execution time of 30 seconds " fread() :从文件指针 ha ...

  3. 高性能 TCP & UDP 通信框架 HP-Socket v3.5.3

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...

  4. 《C#开发常用免费WebServices集合》

    天气预报 Web服务,数据来源于中国气象局 公用事业 http://www.webxml.com.cn/WebServices/WeatherWebService.asmx 中国股票行情 分时走势预览 ...

  5. jquery css3问卷答题卡翻页动画效果

    这个选项调查的特效以选项卡的形式,每答完一道题目自动切换到下一条,颇具特色.使用jQuery和CSS3,适合HTML5浏览器. 效果展示 http://hovertree.com/texiao/jqu ...

  6. iOS 正确选择图片加载方式

    正确选择图片加载方式能够对内存优化起到很大的作用,常见的图片加载方式有下面三种: //方法1 UIImage *imag1 = [UIImage imageNamed:@"image.png ...

  7. 易企秀微场景2016最新完整版V10.5,小编亲测修复众多错误

    易企秀V10.5更新说明1.修复拨号英文错误2.修复转送场景问题3.修复设置场景密码乱码问题4.修复前台批量删除客户图片5.修复数据收集分页问题6.修复图片分类错乱问题7.修复音乐和特效冲突问题8.修 ...

  8. NFR

    你NFR了吗? NFR,即非功能性需求 (Non -Functional Requirements) ,即系统能够完成所期望的工作的性能与质量.具体包括如下内容: – 效率: 软件实现其功能所需要的计 ...

  9. Express 4 handlebars 不使用layout写法

    Express 4 handlebars 不使用layout写法 Express node nodejs handlebars layout 最近刚开始学习使用nodejs. 使用express搭建了 ...

  10. [Erlang 0110] Erlang Abstract Format , Part 1

    Erlang Abstract Format并不难懂,只是枯燥一点罢了,如果把Abstract Format的文档翻译出来,其实就是Erlang教科书中语法入门的部分. Erlang Abstract ...