OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6317|回复: 4

TJPGD图片解码TJPGD图片解码

[复制链接]

7

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
176
金钱
176
注册时间
2014-11-20
在线时间
36 小时
发表于 2021-6-28 08:52:28 | 显示全部楼层 |阅读模式
1金钱
TJPGD网上说的占用RAM很小,但是移植过来之后发现,中间在prepare的时候,分配空间总是失败!
用了HAL的库,原子的代码都是待了FATFS的,但是我的工程预留的空间不是很多,单足够有3.5K了。但还是失败,代码如下:

有哪位大神搞过的,麻烦指点一二!谢谢

最佳答案

查看完整内容[请看2#楼]

问题已解决。分配空间太小了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
176
金钱
176
注册时间
2014-11-20
在线时间
36 小时
 楼主| 发表于 2021-6-28 08:52:29 | 显示全部楼层
问题已解决。分配空间太小了
回复

使用道具 举报

7

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
176
金钱
176
注册时间
2014-11-20
在线时间
36 小时
 楼主| 发表于 2021-6-28 09:42:36 | 显示全部楼层
static void* alloc_pool (   /* Pointer to allocated memory block (NULL:no memory available) */
    JDEC* jd,               /* Pointer to the decompressor object */
    unsigned int nd         /* Number of bytes to allocate */
)
{
    char *rp = 0;


    nd = (nd + 3) & ~3;         /* Align block size to the word boundary */

    if (jd->sz_pool >= nd) {
        jd->sz_pool -= nd;
        rp = (char*)jd->pool;           /* Get start of available memory pool */
        jd->pool = (void*)(rp + nd);    /* Allocate requierd bytes */
    }

    return (void*)rp;   /* Return allocated memory block (NULL:no memory to allocate) */
}

这个函数一直返回空!导致往下走不动!
回复

使用道具 举报

11

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
165
金钱
165
注册时间
2019-5-6
在线时间
42 小时
发表于 2021-12-8 14:40:08 | 显示全部楼层

TJPGD在哪下载?有相关学习的帖子  资料吗   能带我一下不,我没找到什么资料
回复

使用道具 举报

7

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
176
金钱
176
注册时间
2014-11-20
在线时间
36 小时
 楼主| 发表于 2021-12-20 09:31:20 | 显示全部楼层
LYxiaoerlang 发表于 2021-12-8 14:40
TJPGD在哪下载?有相关学习的帖子  资料吗   能带我一下不,我没找到什么资料

网络上爬了很多,没有做记录。最终是自己搞了个算法解决的。核心代码如下
    int w,h,len;
    u32 rc;

    int i,j,k=0;
    int num,total;
    unsigned char c;

    f_lseek(f_bmp,18);
    f_read(f_bmp,&w,4, &rc);    //取4字节,bmp文件头中图像的宽度
    len=((31+w)/32)*4;          //8字节对齐,因为是1位图,1个字节代表8个像素点
    f_lseek(f_bmp,22);
    f_read(f_bmp,&h,4,&rc);     //取4字节,bmp文件头中图像的高度
    f_lseek(f_bmp,26);          //文件指针移动26字节,到数据位

    total = f_size(f_bmp);
    if(total <=0)
        goto _exit;
    for(i=0;i<h;i++)
    {
        num = total - (len*(i+1));  //因为是小端,低地址存高位,高地址存地位。根据扫描方式不同,数据从文件尾部往前取。
        f_lseek(f_bmp, num);
        for(j=0; j<w; j+=8)         //每次移动8位,是1个字节代表8个像素。宽度、高度、都是指像素,因此这里每次移动8的倍数
        {
            f_read(f_bmp, &c, 1, &rc);
            img[k++] = c;
        }
    }
_exit:
    total = 0;
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 17:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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