[問題] c++讀圖檔問題(raw)(解決)
我是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
07/29 01:34, 1F
→
07/29 01:36, , 2F
07/29 01:36, 2F
→
07/29 01:37, , 3F
07/29 01:37, 3F
→
07/29 01:37, , 4F
07/29 01:37, 4F
→
07/29 01:43, , 5F
07/29 01:43, 5F
→
07/29 01:56, , 6F
07/29 01:56, 6F
→
07/29 01:59, , 7F
07/29 01:59, 7F
→
07/29 02:01, , 8F
07/29 02:01, 8F
→
07/29 02:02, , 9F
07/29 02:02, 9F
→
07/29 02:02, , 10F
07/29 02:02, 10F
→
07/29 02:04, , 11F
07/29 02:04, 11F
→
07/29 02:07, , 12F
07/29 02:07, 12F
→
07/29 02:12, , 13F
07/29 02:12, 13F
→
07/29 09:52, , 14F
07/29 09:52, 14F
→
07/29 13:01, , 15F
07/29 13:01, 15F
→
07/30 01:33, , 16F
07/30 01:33, 16F
→
07/30 01:34, , 17F
07/30 01:34, 17F
※ 編輯: ryoukj 來自: 128.192.189.251 (07/30 01:43)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章