野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13045|回复: 3

液晶显示BMP图片的路径如何设置?

[复制链接]
发表于 2015-3-16 21:35:29 | 显示全部楼层 |阅读模式
本帖最后由 幽灵公主 于 2015-3-16 21:36 编辑

使用STM32的例程,可以显示图片,把图片换成其它BMP图片,修改Lcd_show_bmp(0, 0,"/tupian.bmp");,并把图片放到SD卡,液晶不能显示图片,那么图片的路径是如何设置的?
void Lcd_show_bmp(unsigned short int x, unsigned short int y,unsigned char *pic_name)
{
        int i, j, k;
        int width, height, l_width;
        BYTE red,green,blue;
        BITMAPFILEHEADER bitHead;
        BITMAPINFOHEADER bitInfoHead;
        WORD fileType;

        unsigned int read_num;
        unsigned char tmp_name[20];
        sprintf((char*)tmp_name,"0:%s",pic_name);

        f_mount(0, &bmpfs[0]);
        BMP_DEBUG_PRINTF("file mount ok \r\n");   
        bmpres = f_open( &bmpfsrc , (char *)tmp_name, FA_OPEN_EXISTING | FA_READ);        
        if(bmpres == FR_OK)
        {
                BMP_DEBUG_PRINTF("Open file success\r\n");         
                f_read(&bmpfsrc,&fileType,sizeof(WORD),&read_num);     
                if(fileType != 0x4d42)
                {
                        BMP_DEBUG_PRINTF("file is not .bmp file!\r\n");
                        return;
                }
                else
                {
                        BMP_DEBUG_PRINTF("Ok this is .bmp file\r\n");        
                }        
                f_read(&bmpfsrc,&bitHead,sizeof(tagBITMAPFILEHEADER),&read_num);        
                showBmpHead(&bitHead);
                f_read(&bmpfsrc,&bitInfoHead,sizeof(BITMAPINFOHEADER),&read_num);        
                showBmpInforHead(&bitInfoHead);
        }   
        else
        {
                BMP_DEBUG_PRINTF("file open fail!\r\n");
                return;
        }   
        width = bitInfoHead.biWidth;
        height = bitInfoHead.biHeight;
        l_width = WIDTHBYTES(width* bitInfoHead.biBitCount);        
        if(l_width > 960)
        {
                BMP_DEBUG_PRINTF("\n SORRY, PIC IS TOO BIG (<=320)\n");
                return;
        }
        Lcd_GramScan( 3 );
        LCD_OpenWindow(x, y, width, height);
        /* 判断是否是24bit真彩色图 */
        if(bitInfoHead.biBitCount >= 24)
        {
                for(i=0;i< height; i++)
                {         
                        /* 读取一行bmp的数据到数组pColorData里面 */
                        #if 0
                                for(j=0; j< l_width; j++)                                                                                                                 
                                {               
                                        f_read(&bmpfsrc,pColorData+j,1,&read_num);
                                }            
                        #elif 1                                
                                f_read(&bmpfsrc,pColorData,l_width/2,&read_num);
                                f_read(&bmpfsrc,pColorData+l_width/2,l_width/2,&read_num);
                        #else
                                f_read(&bmpfsrc,pColorData,l_width,&read_num);
                        #endif

                        for(j=0; j<width; j++)                                                                                            //一行有效信息
                        {
                                k = j*3;                                                                                                                                         //一行中第K个像素的起点
                                red = pColorData[k+2];
                                green = pColorData[k+1];
                                blue =         pColorData[k];
                                LCD_WR_Data(RGB24TORGB16(red,green,blue)); //写入LCD-GRAM
                        }            
                }                                                                                                                                                                                             
        }   
        else
        {        
                BMP_DEBUG_PRINTF("SORRY, THIS PIC IS NOT A 24BITS REAL COLOR");
                return ;
        }
        f_close(&bmpfsrc);   
}




回复

使用道具 举报

发表于 2015-3-17 01:20:19 | 显示全部楼层
Lcd_show_bmp(0, 0,"/tupian.bmp");是直接打开SD卡根目录下的图片(请确保是在根目录下);
Lcd_show_bmp(0, 0,"/picture/tupian.bmp");表示是在picture文件夹下的图片
如果用例程可以正常显示说明Lcd_show_bmp( )函数结构应该是没问题的,不知楼主是否改动了其他地方
回复 支持 反对

使用道具 举报

发表于 2015-3-17 09:27:57 | 显示全部楼层
Lcd_show_bmp函数内部有设置路径的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-17 16:34:04 | 显示全部楼层
亽亼 发表于 2015-3-17 01:20
Lcd_show_bmp(0, 0,"/tupian.bmp");是直接打开SD卡根目录下的图片(请确保是在根目录下);
Lcd_show_bmp( ...

如果我把生成的字库和任何一张BMP图片都拷到SD卡里面,液晶可以显示图片,只把BMP图片拷到SD卡里面却显示不出来,我再仔细看看,谢谢了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-9-21 11:12 , Processed in 0.027289 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表