看板 C_and_CPP 關於我們 聯絡資訊
下載了Independent JPEG Group最近更新的 8a版,在io部份,多了 jpeg_mem_dest (j_compress_ptr cinfo, unsigned char ** outbuffer, unsigned long * outsize) 這函式。 以前的jpeg_stdio_dest強迫資料必需要寫在硬碟(檔案)上,而這次可以讓資料 保存在memory中了。 現在問題來了,我要怎樣將 jpeg_mem_dest輸出的資料寫在檔案上呢? 我這樣去呼叫jpeg_mem_dest: peg_compress_struct jcs; unsigned char *dst = NULL; unsigned long size = 0; jpeg_mem_dest(&jcs, &dst, &size); /*標準的ijg程式壓縮呼叫法*/ : 也就是jpg的資料是存在dst上面 然後我用fwrite來將這數據寫出來: FILE *fp; fp = fopen("temp.jpg","wb"); fwrite(imageout,sizeof(unsigned char),length,fp); 之後再去資料夾下面開temp.jpg這檔 發現在第4096點之後,色澤/圖紋都會錯亂。 查了一下好像fwrite用法不對。 那請問版上有沒大大用過fwrite來存jpg檔的經驗呢? 請問我那裡弄錯了? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.120.158.204
joyolkreg:我也在研究這份程式碼~ 還沒看懂, 大大加油 04/20 16:24
DrStein:知道了 是jpeg_mem_dest中的引數outbuffer與outsize 04/21 02:21
DrStein:這兩個要先開好內存空間,若沒先開好,則這兩個函式 04/21 02:22
DrStein:檢查到是*outbuffer空指標或是outsize=0時 04/21 02:23
DrStein:就會只開上4096這樣大小的內存空間予outbuffer用 04/21 02:24
DrStein:所以只要圖的大小大於4k,就會錯誤 04/21 02:24