作者DrStein (交換關聯)
看板C_and_CPP
標題[問題] 用fwrite寫.jpg檔
時間Mon Apr 19 19:35:29 2010
下載了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