硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2503|回复: 5
收起左侧

[μCGUI] 请问怎么在ucgui中实现图片的缩放显示?

[复制链接]

20

主题

92

回帖

152

积分

初级会员

积分
152
发表于 2018-8-23 23:02:02 | 显示全部楼层 |阅读模式
目的是为了使用同一张图片,缩放显示以适应不同分辨率的显示屏;
BMP或JPEG格式都可以,考虑存储尺寸的因素,用JPEG最好了;
ucgui自带的JPEG库中,没有JPEG的缩放显示,请问有做好的例程可以参考的不?
如果用BMP格式的话,ucgui自带的演示例程中有BMP缩放显示的,但是有格式要求,我的BMP数据是从U盘读出来的,请问怎么进行格式转换呢?有专门的函数吗,还是需要自己根据BMP文件格式,对照UCGUI演示例程中的格式写转换函数呢?
或者,从U盘读出来的BMP文件可以直接进行缩放显示吗?
以下是UCGUI演示例程中的BMP数据格式:
  1. const GUI_BITMAP GUIDEMO_bm4bpp = {
  2.   61,        /* XSize */
  3.   92,        /* YSize */
  4.   31,        /* BytesPerLine */
  5.   4,         /* BitsPerPixel */
  6.   _acJoerg,  /* Pointer to picture data (indices) */
  7.   &_PalJoerg /* Pointer to palette */
  8. };
复制代码



回复

使用道具 举报

20

主题

92

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2018-8-23 23:13:45 | 显示全部楼层
本帖最后由 tovax 于 2018-8-23 23:14 编辑

这是GUI_BITMAP类型的定义,与BMP文件格式的差别挺大的,不过转换函数应该不难实现,就是不知道这思路是不是合理,还望指点一下。
  1. typedef struct {
  2.   U16P XSize;
  3.   U16P YSize;
  4.   U16P BytesPerLine;
  5.   U16P BitsPerPixel;
  6.   const U8 GUI_UNI_PTR * pData;
  7.   const GUI_LOGPALETTE GUI_UNI_PTR * pPal;
  8.   const GUI_BITMAP_METHODS * pMethods;
  9. } GUI_BITMAP;
复制代码
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2018-8-24 00:50:21 | 显示全部楼层
3.98里面有这个函数GUI_BMP_DrawScaled()或者GUI_BMP_DrawScaledEx()吗
回复

使用道具 举报

20

主题

92

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2018-8-24 11:37:27 | 显示全部楼层
eric2013 发表于 2018-8-24 00:50
3.98里面有这个函数GUI_BMP_DrawScaled()或者GUI_BMP_DrawScaledEx()吗

1. ucgui3.98的源码里找不到GUI_BMP_DrawScaled()或者GUI_BMP_DrawScaledEx这两个函数。

2. 但是ucgui3.98的Release.html中有关于JPEG的描述,不过找不到源码:
New function GUI_JPEG_DrawEx() added. Draws a JPEG file which does not have to be loaded completely into memory.
New function GUI_JPEG_DrawScaled() added. Draws a JPEG file with optional scaling.
New function GUI_JPEG_DrawScaledEx() added. Draws a JPEG file which does not have to be loaded completely into memory with optional scaling.
New function GUI_JPEG_GetInfoEx() added. Returns information about a JPEG file which does not have to be loaded completely into memory.


3. ucgui3.98的Sample中有这样一个文件:
2DGL_DrawJPEGScaled.c,不知道这个例程怎么在电脑上模拟,大概看了一下,也是需要GUI_JPEG_DrawScaledEx()。

4. 搜了一下,有说使用TjpgDec开源库的,不过好像这个库只支持“固定比例”的缩放,如1/2,1/4, 1/8,灵活性和适应性不足。

5. 重点找了一下“GUI_JPEG_DrawScaledEx()”,找到一份以ucgui4.14为基础的JPEG比例缩放显示源码(见附件),不过编译时出现两个报错:
(1)GUI_MEMCPY没有定义,在ucgui3.98源码中内存拷贝用的都是"memcpy",所以这个报错直接把GUI_MEMCPY修改为memcpy应该问题不大;
(2)找不到LCD_GetpfColor2IndexEx,但是ucgui3.98源码中有“LCD_GetpfIndex2ColorEx”这个函数,这两个函数看上去是索引和颜色的互相转换,
            把“LCD_GetpfIndex2ColorEx”逆向转换代码重写一下应该可以吧?

从以上的信息分析的话,最合理的实现图片比例缩放显示的方式应该是第5点的(2)吧?请问有没有写好的LCD_GetpfColor2IndexEx的源码呢?
我试着写一下,测试通过后回来回复给大家。




JPEG.zip

22.18 KB, 下载次数: 36

回复

使用道具 举报

20

主题

92

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2018-8-24 18:57:34 | 显示全部楼层
本帖最后由 tovax 于 2018-8-24 19:06 编辑

楼上附件的代码做适当移植后可以进行JPEG缩放显示,不过是锁定长宽比例的。
那么GIF格式可以进行缩放显示吗?ucgui3.98源码中没有GIF Scaled相关的函数。

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2018-8-25 01:36:34 | 显示全部楼层
tovax 发表于 2018-8-24 18:57
楼上附件的代码做适当移植后可以进行JPEG缩放显示,不过是锁定长宽比例的。
那么GIF格式可以进行缩放显示 ...

厉害了

GIF的好像还真不太好找。PNG的那个有源代码。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-10 05:18 , Processed in 0.215795 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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