
概述:本贴主要阐述使用jpglib库进行jpg和bmp之间的解码:RAM设置和Red和Blue颜色反转两个问题。 硬件平台: stm32f429bi 软件平台: keil v5版本搭配STM32 CUBE库 正文: 1、转码RAM控制(配置文件jconfig.h) stm32芯片具有LCD和DCMI等功能,可谓是十分丰富,但不具备图片硬件转码的功能,所以很多用户都使用jpglib转码,网上关于stm32使用jpglib库进行bmp和jpg之间的转换例子有很多(大多都是基于PC的应用程序,PC RAM很充足,所以移植程序大多都不考虑jpglib对内存的要求),不过在stm32f4平台上移植,要注意RAM的开销。 这款芯片内部RAM为256kb,不过在实际使用中,因为地址不连续,我们只能选择其中的64kb(CCMRAM)或者192kb作为程序RAM(Memory mapping详见:芯片Datasheet 84页)。 jpglib库在转码过程中,图片源文件的分辨率,直接影响解码过程中申请堆内存大小,那么申请超过实际RAM,就会导致进入硬件中断HardFault_Handler()中。 实践中发现jpglib库对内存申请的大小,可在jconfig.h文件中有上限设置,宏定义(MAX_ALLOC_CHUNK)。 2、转码RGB控制(配置文件jmorecfg.h) 在使用jpglib bmp转jpg时有可能出现jpg的颜色反转,很多朋友自己编写算法改变bmp源文件的RGB顺序,但库已经提供了相关配置。 #define RGB_RED 0 /* Offset of Red in an RGB scanline element */ #define RGB_GREEN 1 /* Offset of Green */ #define RGB_BLUE 2 /* Offset of Blue */ 如果颜色出现R和B的反转,可以如下设置,不必重新编写反转方法。 #define RGB_RED 2 /* Offset of Red in an RGB scanline element */ #define RGB_GREEN 1 /* Offset of Green */ #define RGB_BLUE 0 /* Offset of Blue */ 大家需要根据程序实际情况修改。 谢谢! |
也是项目中曾经遇到的问题,分享一下,谢谢!