void JPEG_encode(void)//编码主函数 { u8 res; u16 i,j,color; res=f_mount(0, &fatfs); while(res)LCD_String(20,20,"SD mount failed!",RED); res=f_open(&fileW,"0:/DCMI/ph1.jpg",FA_WRITE|FA_CREATE_ALWAYS);//创建并打开 while(res)LCD_String(20,20,"file create failed!",RED); cinfo=jpeg_create_compress();//创建JPEG压缩文件 cinfo->image_width=240; cinfo->image_height=320; cinfo->output=0;//数据输出到NULL; jpeg_set_default(cinfo);//设置默认参数 jpeg_start_compress(cinfo);//开始压缩,写压缩文件头信息 j=0; while(cinfo->next_line<cinfo->image_height) { for(i=0;i<240;i++)//读取一行 { LCD_Cursor(i,cinfo->next_line); if((lcdid&0xff00)==0x9300)color=BGR565toRGB565(LCD_ReadRAM()); else color=LCD_ReadRAM(); cinfo->inbuf[j++]=(u8)((color&0xf800)>>8); cinfo->inbuf[j++]=(u8)((color&0x07e0)>>3); cinfo->inbuf[j++]=(u8)((color&0x001f)<<3); } cinfo->next_line++; //当数据填满时压缩并输出数据(填满16行) if(cinfo->next_line%cinfo->inbuf_height==0) { j=0; jint_process_rows(cinfo);//在这里压缩 memset((void*)(cinfo->inbuf),0,cinfo->inbuf_size);//清空输入缓冲区 } } jpeg_finish_compress(cinfo); f_close(&fileW); LEDOn(LED4); while(1); }
//LCD读点 u16 LCD_GetPoint(u16 x,u16 y) { LCD_SetCursor(x,y); return BGR565toRGB565(LCD_ReadRAM()); }