完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
请教下,使用 emwin 解码 bmp 图片,图片 1:1 及缩小显示都没有问题,唯独放大显示不行 ?
使用emwin 版本如下: emwin v5.40 keil argb -ot GUI_MEMDEV_Handle hMemBMP; 程序如下: /* 函数名称:GUI_BMP_DrawMemShowScaled 函数功能:加载到SDRAM显示,带放大、缩小功能 参数: FileName 显示的文件名称 _usX 显示 x 坐标 _usY 显示 y 坐标 member 缩放分子, 分子、分母同时为1,表示不用缩放 denom 缩放分母 分子、分母同时为1,表示不用缩放 mode BMP_DISP_MODE_SPE_POS:指定位置显示 , 由参数_usX,_usY确定显示位置 BMP_DISP_MODE_CEN_POS: 居中显示,当选择此模式的时候参数_usX,_usY无效 返回值: 0表示成功,其他值错误 */ uint8_t GUI_BMP_DrawMemShowScaled(const char *FileName, U16 _usX, U16 _usY,int member,int denom, _BMP_DispPosTpyeDef mode) { FRESULT result; FIL BMP_File; UINT bw; float Xflag,Yflag; int XSize, YSize; result = f_open( BMP_File, FileName, FA_READ ); // 打开文件 if (result != FR_OK) { return 1; } // 申请一块内存空间 _acBufferPtr = GUI_MYmalloc(BMP_File.obj.objsize); if(_acBufferPtr == NULL) { f_close( BMP_File); return 2; } vTaskSuspendAll(); // 开启调度锁 _rx_BmpBuff = _acBufferPtr; // 读取文件到动态内存 result = f_read( BMP_File, _rx_BmpBuff, BMP_File.obj.objsize, bw); if (result != FR_OK) { // 关闭文件 f_close( BMP_File); GUI_MYfree((void *)_acBufferPtr); xTaskResumeAll (); // 关闭调度锁 return 3; } // 关闭文件 f_close( BMP_File); xTaskResumeAll (); // 关闭调度锁 XSize = 1024; YSize = 600; // 创建内存设备,并将BMP图片绘制到此内存设备里面,此内存设备要在主程序中用到 // 所以退出此函数前,不要释放。 hMemBMP = GUI_MEMDEV_CreateEx(0, 0, XSize, YSize, GUI_MEMDEV_HASTRANS); GUI_MEMDEV_Select(hMemBMP); switch(mode) { // 指定位置显示 case BMP_DISP_MODE_SPE_POS: _rx_BmpBuff = _acBufferPtr; if((member == 1) (denom == 1)) //无需缩放,直接绘制 { GUI_BMP_Draw(_rx_BmpBuff,_usX,_usY); //在指定位置显示BMP图片 } else //否则图片需要缩放 { GUI_BMP_DrawScaled(_rx_BmpBuff,_usX,_usY,member,denom); } break; // 在LCD屏中间显示 case BMP_DISP_MODE_CEN_POS: _rx_BmpBuff = _acBufferPtr; XSize = GUI_BMP_GetXSize(_rx_BmpBuff); //获取图片的X轴大小 _rx_BmpBuff = _acBufferPtr; YSize = GUI_BMP_GetYSize(_rx_BmpBuff); //获取图片的Y轴大小 if((member == 1) (denom == 1)) //无需缩放,直接绘制 { _rx_BmpBuff = _acBufferPtr; //在LCD中间显示图片 GUI_BMP_Draw(_rx_BmpBuff,(1024-XSize)/2 - 1,(600-YSize)/2 - 1); } else //否则图片需要缩放 { Xflag = (float)XSize*((float)member/(float)denom); Yflag = (float)YSize*((float)member/(float)denom); XSize = (1024-(int)Xflag)/2 - 1; YSize = (600-(int)Yflag)/2 - 1; _rx_BmpBuff = _acBufferPtr; GUI_BMP_DrawScaled(_rx_BmpBuff,XSize,YSize,member,denom); } break; } // 释放动态内存hMem GUI_MYfree((void *)_acBufferPtr); GUI_MEMDEV_Select(0); //选择 GUI_MEMDEV_WriteAt(hMemBMP, 0, 0); //显示 bmp 图片 GUI_MEMDEV_Delete(hMemBMP); //删除 bmp 图片内存 return 0; // 成功 } void bmp_disptest(void) { //指定位置显示,无需缩放 ok GUI_BMP_DrawMemShowScaled("0:/Picture/bmp/1024x600-6.bmp", 0, 0, // 显示的 x, y 坐标 1, 1, // 无需缩放 BMP_DISP_MODE_SPE_POS); //指定位置显示 HAL_Delay(2000); //指定位置显示,缩小 1/2 显示 ok GUI_SetColor(GUI_WHITE); GUI_Clear(); GUI_BMP_DrawMemShowScaled("0:/Picture/bmp/1024x600-6.bmp", 100, 50, // 显示的 x, y 坐标 1, 2, // 缩小 1/2 显示 BMP_DISP_MODE_SPE_POS); //指定位置显示 HAL_Delay(2000); //中间位置显示,缩小 1/2 显示 ok GUI_SetColor(GUI_WHITE); GUI_Clear(); GUI_BMP_DrawMemShowScaled("0:/Picture/bmp/1024x600-6.bmp", 100, 50, // 显示的 x, y 坐标 1, 2, // 缩小 1/2 显示 BMP_DISP_MODE_CEN_POS); //中间位置显示 HAL_Delay(2000); //指定位置显示,1:1 显示 ok GUI_SetColor(GUI_WHITE); GUI_Clear(); GUI_BMP_DrawMemShowScaled("0:/Picture/bmp/A4R4G4B4.bmp", 1024/2, 600/2, // 显示的 x, y 坐标 1, 1, // 1:1显示 BMP_DISP_MODE_SPE_POS); //指定位置显示 HAL_Delay(2000); //指定位置显示,扩大 2 倍 显示 没有任何显示 ????????????? GUI_SetColor(GUI_WHITE); GUI_Clear(); GUI_BMP_DrawMemShowScaled("0:/Picture/bmp/A4R4G4B4.bmp", 1024/2, 600/2, // 显示的 x, y 坐标 2, 1, // 扩大 2 倍 显示 BMP_DISP_MODE_SPE_POS); //指定位置显示 HAL_Delay(2000); //中间位置显示,扩大 2 倍 显示没有任何显示 ????????????? GUI_SetColor(GUI_WHITE); GUI_Clear(); GUI_BMP_DrawMemShowScaled("0:/Picture/bmp/A4R4G4B4.bmp", 0, 0, // 显示的 x, y 坐标 2, 1, // 扩大 2 倍 显示 BMP_DISP_MODE_CEN_POS); //中间位置显示 } |
|
相关推荐
1个回答
|
|
文件路径是否一直一致,参考下【emWin - BMP图片显示】资料,不是所有的图片都合适压缩的
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1683 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1582 浏览 1 评论
1013 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
703 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1627 浏览 2 评论
1892浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
675浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
538浏览 3评论
558浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
526浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-4 02:54 , Processed in 0.735132 second(s), Total 48, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号