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

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

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

はい。今日の内容は取得したデータがオフセットなのか実データか調べることでしたね。
正直な話、昨日「面倒」とか書いてたけど、大して面倒ではありませんでした。
またいつものサイトのデータですが、どうやら、「情報量が4バイトを超えるときは『オフセット』」らしいです。

というわけで、どうやら情報量を計算すればよさそうです。

で、情報量の計算ですが、「タイプごとの大きさ×情報数」で出ます。

・タイプごとの大きさについて。
BYTE,ASCII=1バイト(8Bit)
SHORT      =2バイト(16Bit)
LONG        =4バイト(32Bit)
RATIONAL  =8バイト(64Bit)
Undefined   =2バイト(16Bit)(サンプルでは「UNDEF」と表示)
SLONG      =4バイト(32Bit)
SRATIONAL=8バイト(64Bit)
です。

ちなみにこんな関数になりました。

static int   TypeSize[]={1,1,2,4,8,0,1,0,4,8};//タイプごとの大きさ
...
int CalcSize(EXIF_DIRECTORY *pED){
    return pED->DataNum*TypeSize[pED->Type-1];
}

TypeSizeで、各大きさを保存して、CalcSize関数で計算しています。
pED->Type-1になっているのは、配列が0が起点なのにTypeが1で始まるからです。

んで、実際に比較するのは、

bool isData(EXIF_DIRECTORY *pED){
    return (CalcSize(pED)>4)?false:true;
}

で、行っています。

ソースを乗っけておきますんでどうぞ。
ダウンロード(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]