質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

544閲覧

GDI+でのタグ操作に伴うデータの扱い

BeatStar

総合スコア4958

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2018/10/28 01:27

編集2018/10/30 07:34

(趣味)C++でやっています。

GDI+というライブラリを使ってjpgファイル内に記述されているタグデータを取得したいと考えています。

GDI+ではPropertyTagTypeByteという定数があり、

PropertyTagTypeASCII Specifies that the value data member is a null-terminated ASCII string. If you set the type data member of a PropertyItem object to PropertyTagTypeASCII, you should set the length data member to the length of the string including the NULL terminator. For example, the string "HELLO" would have a length of 6. PropertyTagTypeByte Specifies that the value data member is an array of bytes. PropertyTagTypeLong Specifies that the value data member is an array of unsigned long (32-bit) integers. PropertyTagTypeRational Specifies that the value data member is an array of pairs of unsigned long integers. Each pair represents a fraction; the first integer is the numerator and the second integer is the denominator. PropertyTagTypeShort Specifies that the value data member is an array of unsigned short (16-bit) integers. PropertyTagTypeSLONG Specifies that the value data member is an array of signed long (32-bit) integers. PropertyTagTypeSRational Specifies that the value data member is an array of pairs of signed long integers. Each pair represents a fraction; the first integer is the numerator and the second integer is the denominator. PropertyTagTypeUndefined Specifies that the value data member is an array of bytes that can hold values of any data type.

という定義のようです。

PropertyTagTypeASCIIは何とか理解できたのですが( wchar_t配列と考えていいみたいです。 )
それ以外の ~Byte, ~Long... がわかりません。

実際に試してみましたが、意味のあるデータだとは思えません...

~ASCII のやつなら取得できたデータを見ると "コメントです" のような意味のあるデータだったり、
日付とかでした。
これらならわかるのですが~Long等は数値なので、まったくイメージができません...

それぞれの読み方(?)をご存じの方、お願い致します。

例えば tag[].value にデータが入っているものとして

wchar_t w[261];
// for文内にて
wprintf( w, "%S", (wchar_t*)tag[i].value );

のようにすればいい...みたいな感じのです。

説明がしづらいのでわかりにくいとは思いますが...

「"GDI+" PropertyTagTypeByte」等で検索してみましたが、Delphiのものは見つかりましたが、C言語やC++でのものがなかったので...

[情報]
言語: C++
開発環境: VC++2008


[追記0~1]

すみません。外出先だったのでソースコードが開示できませんでした...

字数制限のためここに記述

※1: 本来は分割してあり、ここに載せるためにちょっと修正してあります。なので欠けていたりnamespace名が違っていたりしますが...

※2: また、GDI+のヘルプファイルにあったサンプルを参考にしています。

[追記1.2]

あ、GDI+は最新のものだと思います。つい最近取ったので...
(バージョン忘れた...)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ここでいうタグはJPEGファイルのExif情報のタグのことですね。

ライブラリからはあくまでもタグ情報にアクセス手段を提供するものなので、具体的なデータの情報はtakabosoftさんが紹介されている公式サイトか、Exifというキーワードで検索して日本語情報サイトを見てみてください。

デジカメで撮影されたJPEG画像には画像の情報がこの形式で格納されています。サイズや向きなどの基本的な情報から、撮影したカメラの型番や、撮影場所(のGPS座標)まで含まれることもあります。

投稿2018/10/29 07:33

KoichiSugiyama

総合スコア3041

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BeatStar

2018/11/07 01:49

ご回答ありがとうございます。 (忘れてた...orz) もうちょっと調べてみます。
guest

0

ベストアンサー

私も素人なのですが、そもそも何の情報かを識別するための「TAG_ID」があって、それによってどんな型が格納されているかが違うわけですよね。

例えばJPGの向きを示すタグ(これはGDI+なら普通にプロパティで取得できた気がしますが)なら、

0x0112 Orientation
int16u

TagID=0x0112で、データ型はint16u・・・たぶん「PropertyTagTypeShort」が取得できるのではないかと思います。

で、ここで得られる数値が一体何を示すかは、参考サイトには以下のように載っています。

1 = Horizontal (normal)
2 = Mirror horizontal
3 = Rotate 180
4 = Mirror vertical
5 = Mirror horizontal and rotate 270 CW
6 = Rotate 90 CW
7 = Mirror horizontal and rotate 90 CW
8 = Rotate 270 CW

3番なら180度回転している、というように読めます。
このように各TAGによって、何の値が、どんな意味を持つかは変わっています。

実際に試してみましたが、意味のあるデータだとは思えません...

意味のあるデータかどうかは公式の資料を探して、突き合わせて確認してみてください。

投稿2018/10/29 00:40

takabosoft

総合スコア8356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BeatStar

2018/11/07 01:48

ご回答ありがとうございます。 (忘れてた...orz) やはり分析ですかね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問