使用TJpgDec进行JPEG图像解码

#include "tjpgd.h"

#include <string.h>

 

JDEC tjpeg_dev;
unsigned char jpg_buffer[4096];
unsigned char rgb_buffer[60000];

uint16_t image_index;
uint16_t image_size;

 

unsigned int jpeg_in_func(JDEC *jd, unsigned char *buf, unsigned int num)
{
 unsigned int rb;
 uint8_t *dev = jd->device;
 
 if(buf)
 {

  if(image_index + num <= image_size)
   rb = num;
  else
   rb = image_size - image_index;

  memcpy(buf, dev + image_index, rb);
  image_index += rb;
  return rb;
 }
 else
 {
  if(image_index + num <= image_size)
   rb = num;
  else
   rb = image_size - image_index;

  image_index += rb;

  return num;
 }
}

unsigned int jpeg_out_func(JDEC *jd, void *rgbbuf, JRECT *rect)
{
 unsigned char *src, *dst;
 unsigned int y, bws, bwd; 

 src = (unsigned char *)rgbbuf;
 dst = rgb_buffer + 3 * (rect->top * jd->width + rect->left);

 bws = 3 * (rect->right - rect->left + 1);
 bwd = 3 * jd->width;

 for (y = rect->top; y <= rect->bottom; y++)
 {
  memcpy(dst, src, bws);
  src += bws;
  dst += bwd;
 }

 return 0;
}

 

void jpg_decode(uint8_t *image, uint16_t count)
{
 image_size = count;
 image_index = 0;
 jd_prepare(&tjpeg_dev, jpeg_in_func, jpg_buffer, 4096, image);
 jd_decomp(&tjpeg_dev, jpeg_out_func, 0);
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值