Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Exif informace - výpis v C/C++

A este priklad na motorola endian (to je jpeg z mojho mobilu). Tvoj program MUSI vediet spracovat oba endiany, napr. si urob fcie CitajWORD a CitajDWORD, napr. (moznosti je mnoho mozes to urobit aj inac napr. aj naslednou konverziou apod)

unsigned int CitajDWORD(endian) {
 unsigned int i, bajt, hodnota=0;
 for (i=0; i<4; i++) {
  bajt = precitas bajt zo suboru;
  if(endian) {
   hodnota<<=8;
   hodnota+=bajt;
  }else{
   hodnota>>=8;
   hodnota+=bajt<<24;
  }
 }
 return(hodnota);
}
pre WORD (2bajty) to ani nemusis cyklom len 2x precitas bajt a ulozis spravne do unsigned int.
Ten priklad jpeg suboru:
FF D8 - Start Of Image, nic nepreskakujem citam dalsi chunk.
FF E0 - tento jpeg chunk ma nezaujima takze musim preskocit
00 10 - dlzka toho chunku je 10hex (16dec), takze musim preskocit presne 16-2= 14 bajtov, lebo 2bajty (dlzku samotnu) som uz precital!
FF E1 - hura mam APP1 chunk
25 06 - dlzka APP1 ma teraz nezaujima, ignorujem
45 78 69 66 - "Exif", otestujem alebo ignorujem
00 00 - ignorujem
TU JE EXIF OFFSET 0 (v mojom pripade je to absolutny offset suboru 1E hex, zapamatam si alebo vynulujem pocitadlo precitanych bajtov)
4D 4D - "MM" - zapamatam si ze mam motorola endian a pouzijem to pri citani vsetkych viacbajtovych hodnot
00 2A - tu ma byt 002A a aj je, otestujem alebo ignorujem.
00 00 00 08 - nulta IPD je na offsete 8, takze preskakujem 8-8=0 takze nic nepreskakujem.
00 09 - bude nasledovat 9 tagov
01 0F - nezaujima ma, preskakujem 2+4+4 dalsich bajtov
01 10 - nezaujima ma, preskakujem 2+4+4 dalsich bajtov
atd presne 9x.
Potom po tych 9 tagoch si precitam 4bajty "next IPD offset" ak je 00000000 tak koncia EXIF tabulky, ak neni 00000000 tak na tom exif offsete je dalsia tabulka s dalsimi EXIF tagmi (zacina 2bajtami poctom tagov a potom tagy a potom zas next IPD offset).
V tomto subore neni ani tag 0132 a ani 9003 takze v nom neni cas ani datum.

Reakce na odpověď

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny