|
实现将原始位图数据编码成为JPEG文件,发送到串口。
现在程序还是热呼呼的,因为刚才才从VC程序移植到STM32成功,实现正常压缩。
稍作修改,可以接摄像头,做成jpeg串口摄像头。
硬件只需要:stm32f103ZET6,串口usart1。
图像数据从usart1输出,波特率115200.可以用串口软件接收数据,保存为.jpg后缀名,即可在电脑上打开该图片文件。
我用的串口软件是AccessPort。
编码生成的图片大小为320x240.
原始图片以RGB数组的形式放在程序里面了,大小为240x16.因为320x240的bmp图片会到200多K,所以只截取了一部分。
原始图像:
![](http://cache.amobbs.com/bbs_upload782111/files_25/ourdev_530693.PNG)
(原文件名:正.PNG)
压缩后生成的图像:
![](http://cache.amobbs.com/bbs_upload782111/files_25/ourdev_530694.jpg)
压缩后生成的图像 (原文件名:119.jpg)
相关注释及说明:
unsigned char JPG_enc_buf[30000];//jpeg 输出缓冲
unsigned int pt_buf = 0;//缓冲区指针
volatile unsigned char inbuf_buf[11520];
//输入区缓冲,这个是为宽度240的图片大小设置的,如果要更大的图片,就需要更大的缓冲11520 = 240x16x3
JSAMPLE *image;//图像源数据指针
buf_BMP[]//源图像数组
width = 240;//图像的宽度
height = 320;//图像的高度
jpeg_write_scanline(cinfo, &image[(cinfo->next_line*cinfo->image_width*3)%11520]);
//因为输入区ram很小,所以用了%11520做了循环重复,正常的程序自己做处理
移植前的程序都是用malloc分配内存,全部改成了静态的数组,
输出函数:
void jutl_write_byte(UINT8 c, char *f)
{
assert(f);
//fwrite(&c, sizeof(UINT8), 1, f);
f[pt_buf] = c;
if(pt_buf < 30000)pt_buf++;
}
ourdev_530701.rar
点击此处下载 ourdev_530727.rar(文件大小:851K) (原文件名:stm32_Demo_ili9325simio_our2.rar)
【41楼】 wangguanfu 反映说工程文件有问题,并帮助整理了下,I-A-R-5-.-2-0和谐版本编译
点击此处下载 ourdev_530829.rar(文件大小:851K) (原文件名:stm32_Demo_jpeg.rar.rar)
建议:
1.下载后rebuild all
2.程序输出的文件大小为 22900字节大小,如果串口收到的字节数目不对 的话,可能串口线不好,也可降低波特率试下,修改user_uart.c里的UART1_Configuration里的USART_InitStructure.USART_BaudRate |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|