GDI_RESULT gdi_image_sequence_draw_handler(U32 flag,U32 frame_pos,S32 x,S32 y,S32 w,S32 h,U8* data_ptr,U32 img_size) { U8 img_type = GDI_IMAGE_TYPE_INVALID; U8* header; int frame_sum; int index = frame_pos; int offset; int size; data_ptr-=8; header = data_ptr; frame_sum = header[1]; if(index <0 || index >= frame_sum) return GDI_FAILED; header +=8 + index*12; offset = (header[3]<<24) | (header[2]<<16) |(header[1]<<8)|(header[0]); header+=4; size = (header[3]<<24) | (header[2]<<16) |(header[1]<<8)|(header[0]); header+=4; gdi_anim_set_delay((header[3]<<24) | (header[2]<<16) |(header[1]<<8)|(header[0])); offset += 12 * frame_sum; switch(data_ptr[0]) { case GDI_IMAGE_TYPE_BMP_SEQUENCE: img_type = GDI_IMAGE_TYPE_BMP; break; case GDI_IMAGE_TYPE_JPG_SEQUENCE: img_type = GDI_IMAGE_TYPE_JPG; break; case GDI_IMAGE_TYPE_PNG_SEQUENCE: img_type = GDI_IMAGE_TYPE_PNG; break; case GDI_IMAGE_TYPE_DEVICE_BITMAP_SEQUENCE: img_type = GDI_IMAGE_TYPE_DEVICE_BITMAP; break; case GDI_IMAGE_TYPE_ABM_SEQUENCE: img_type = GDI_IMAGE_TYPE_ABM; break; } return gdi_image_codec_draw( GDI_IMAGE_SRC_FROM_RESOURCE_WITHOUT_HEADER, (U8*)data_ptr+offset,img_type,size, x,y,w,h,flag,frame_pos); }
GDI_RESULT gdi_image_sequence_get_dimension_handler(U32 flag,U8* data_ptr,U32 img_size,S32 *width,S32 *height) { U8 img_type=GDI_IMAGE_TYPE_INVALID; U8* header; int frame_sum; int index = 0; int offset; int size; data_ptr-=8; header = data_ptr; frame_sum = header[1]; if(index <0 || index >= frame_sum) return GDI_FAILED; header +=8 + index*12; offset = (header[3]<<24) | (header[2]<<16) |(header[1]<<8)|(header[0]); header+=4; size = (header[3]<<24) | (header[2]<<16) |(header[1]<<8)|(header[0]); header+=4; gdi_anim_set_delay((header[3]<<24) | (header[2]<<16) |(header[1]<<8)|(header[0])); offset += 12 * frame_sum; switch(data_ptr[0]) { case GDI_IMAGE_TYPE_BMP_SEQUENCE: img_type = GDI_IMAGE_TYPE_BMP; break; case GDI_IMAGE_TYPE_JPG_SEQUENCE: img_type = GDI_IMAGE_TYPE_JPG; break; case GDI_IMAGE_TYPE_PNG_SEQUENCE: img_type = GDI_IMAGE_TYPE_PNG; break; case GDI_IMAGE_TYPE_DEVICE_BITMAP_SEQUENCE: img_type = GDI_IMAGE_TYPE_DEVICE_BITMAP; break; } return gdi_image_codec_get_dimension( GDI_IMAGE_SRC_FROM_MEMORY, (U8*)data_ptr+offset,img_type,size, width,height,flag); }