本文走读了 uboot 代码目录下的drivers\video\cfb_console.c 下的 video_display_bitmap 函数在显示24位位图的时的代码分析。文章假定当前LCD配置格式为 GDF_32BIT_X888RGB
/*
* Display the BMP file located at address bmp_image.
*/
int video_display_bitmap(ulong bmp_image, int x, int y)
{
ushort xcount, ycount;
uchar *fb;
struct bmp_image *bmp = (struct bmp_image *)bmp_image;
uchar *bmap;
ushort padded_line;
unsigned long width, height, bpp;
unsigned colors;
unsigned long compression;
struct bmp_color_table_entry cte;
#ifdef CONFIG_VIDEO_BMP_GZIP
unsigned char *dst = NULL;
ulong len;
#endif
WATCHDOG_RESET();
if (!((bmp->header.signature[0] == 'B') &&
(bmp->header.signature[1] == 'M'))) {
#ifdef CONFIG_VIDEO_BMP_GZIP
......省略部分代码
#endif /* CONFIG_VIDEO_BMP_GZIP */
}
width = le32_to_cpu(bmp->header.width); //图片宽
height = le32_to_cpu(bmp->header.height); //图片高
bpp = le16_to_cpu(bmp->header.bit_co