忍者ブログ
プログラミングのメモ書きです。日記も兼ねてます。
[8]  [7]  [6]  [5]  [4]  [3]  [2]  [1
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

よくデジカメなどで使われる「Exif」を読み込んでみます。(2日目)

今日は、いよいよメインの情報を読んでいきます。

とその前に、昨日のバグが直りました。

char Head    [0x10]={0};//ヘッダ
を、
unsigned char Head    [0x10]={0};//ヘッダ

にしたら、正しく取得できました。

さて、メインの情報ですが、

タグ、格納値タイプ、格納値数、格納値

の順で並んでいます。
全部で12バイトですのでまた全部読んじゃいます。

if(fseek(File,offset*12+0x16,SEEK_SET))return false;
   
for(i=0;i<12;i++){
    Buf[i]=fgetc(File);
    printf("%02d:0x%02X\n",i,Buf[i]);
}

fseekは、読み込み開始位置をずらす関数です。(本当はちょっと違うけど…)
この関数で、読み込み位置に移動して読み込みを開始します。

次は読み込んだデータの振り分けです。
変数一つ一つに保存すると面倒なので、構造体を使っています。

構造体の定義

//ディレクトリ構造体
typedef struct EXIF_DIRECTORYtag{
    unsigned short TAG ;
    unsigned short Type;
    unsigned short DataNum;
    unsigned int   Data;
}EXIF_DIRECTORY;

ここに、読み込んだデータを格納していきます。

pED->TAG    =(type)?Buf[0]<<8 |Buf[1]:Buf[0]|Buf[1]<<8;
pED->Type   =(type)?Buf[2]<<8 |Buf[3]:Buf[2]|Buf[3]<<8;
pED->DataNum=(type)?Buf[4]<<32|Buf[5]<<16|Buf[6]<<8 |Buf[7] :Buf[7]<<32 |Buf[6]<<16 |Buf[5]<<8|Buf[4];
pED->Data   =(type)?Buf[8]<<32|Buf[9]<<16|Buf[10]<<8|Buf[11]:Buf[11]<<32|Buf[10]<<16|Buf[9]<<8|Buf[8];

昨日取っておいた「type」がここでも使われています。

ところで格納値についてなのですが、ここには単純に値が入るだけではなく値が入ってるオフセットが入ることもあるそうです。
そこのところは面倒なのでまた別の日にすることにします。(いつになるかなぁ(^ω^;))

ソースを乗っけておきますんでどうぞ。
ちなみに、今回からC言語で書いています。(前回は、C++)
ソースのダウンロード(zip)
では。
PR
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事へのトラックバック
この記事にトラックバックする:
カレンダー
09 2024/10 11
S M T W T F S
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
最新コメント
[01/09 ⅠAⅤAⅨUの医学部再受験]
[04/21 ほ@神宮寺]
[03/26 クドっち]
[03/23 なつめぐ]
[03/23 なつめぐ]
最新トラックバック
プロフィール
HN:
まっちゃん
性別:
非公開
ブログ内検索
アクセス解析
カウンター
忍者ブログ [PR]