[問題] c++讀圖檔問題(raw)(解決)

看板C_and_CPP (C/C++)作者 (殘缺)時間14年前 (2011/07/29 01:32), 編輯推噓0(0017)
留言17則, 3人參與, 最新討論串1/1
我是c++的新手,正在寫一份讀圖檔的程式 麻煩各位前輩指教! 要求是要從raw檔中讀取出jpg出來,並存檔 但我寫到"讀取jpg檔"的部份時卡住了 雖然知道"流程"大概該怎麼做,試了很多function卻還是不知道"如何"做>"< 流程-> 讀取raw檔,讀取每個byte,如果讀到開頭0xFF 0xD8表示是jpg檔 存檔,繼續讀取尋找下一個jpg,重複 總結目前卡住的問題 1. 如何從一個檔案中尋找出 byte 0xFF 呢? 查過了像是fscanf, get...的用法 我覺得應該是用read,但是read不是會read整個檔案嗎? 2. 我用fwrite來存找到的檔案 但我要如何輸入檔案的大小呢? 例如我設定 subbuf 是512,輸出的大小會是512 但是當我找到一個jpg時我該如何知道jpg的大小呢? 寫得頭暈腦脹中,有敘述不清楚的地方我會再補充 -------------------------編輯 感謝熱心版友,我一開始沒搞清楚的是read和write不同的地方 剩下的就是迴圈的logic 我的作法: fp = fopen(argv[1], "rb"); if (fp == NULL) { perror("Please enter a valid file name\n");} else { printf("Start finding image...\n"); sprintf(str, "liang%d.jpg", imagec); out = fopen(str, "wb"); while ( !feof(fp) ) { fread(sector, 1, 512, fp); if ( (sector[0] == 0xff && sector[1] == 0xd8 && sector[2] == 0xff && sector[3] == 0xe1) || (sector[0] == 0xff && sector[1] == 0xd8 && sector[2] == 0xff && sector[3] == 0xe0) ) { if (out!=NULL) {fclose(out);} printf("Found image %d\n", imagec); sprintf(str, "liang%d.jpg", imagec); imagec++; out = fopen(str, "wb"); }// if if (out!=NULL) { fwrite(sector, 1, 512, out); } }//while 謝謝:D -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 70.33.72.104

07/29 01:34, , 1F
equal operate is ==
07/29 01:34, 1F

07/29 01:36, , 2F
fread is return how much byte it read instead of data
07/29 01:36, 2F

07/29 01:37, , 3F
Don't fopen the same file again when you didn't close
07/29 01:37, 3F

07/29 01:37, , 4F
it
07/29 01:37, 4F

07/29 01:43, , 5F
Here functions you use is from C....
07/29 01:43, 5F

07/29 01:56, , 6F
It is read 0xFF (1byte) or 0xFF 0xD8(2byte)
07/29 01:56, 6F

07/29 01:59, , 7F
謝謝樓上意見,我學的是C++,請問我都用錯了嗎>"<(講義上的
07/29 01:59, 7F

07/29 02:01, , 8F
你現在只有碰到C語法還沒到C++
07/29 02:01, 8F

07/29 02:02, , 9F
你要怎麼判斷jpg
07/29 02:02, 9F

07/29 02:02, , 10F
而且read不見得會讀整個檔案
07/29 02:02, 10F

07/29 02:04, , 11F
fopen("mystery.raw","rb");//建議用rb 除非你用的是Unix
07/29 02:04, 11F

07/29 02:07, , 12F
char , or unsigned char ??
07/29 02:07, 12F

07/29 02:12, , 13F
我看了mysery.raw... 裏面有一大部份是0x00...
07/29 02:12, 13F

07/29 09:52, , 14F

07/29 13:01, , 15F

07/30 01:33, , 16F
謝謝樓上熱心! 讓我了解怎麼使用open,read和write了,雖然
07/30 01:33, 16F

07/30 01:34, , 17F
loop的地方我用的logic不太一樣,完成會回來編輯
07/30 01:34, 17F
※ 編輯: ryoukj 來自: 128.192.189.251 (07/30 01:43)
文章代碼(AID): #1ECPqPQ5 (C_and_CPP)
文章代碼(AID): #1ECPqPQ5 (C_and_CPP)