2017-03-02 2 views
1

qtのWindowsアプリケーションでjpegイメージのexifデータを読みたいと思います。 私はこの機能を使用しています。Image.GetAllPropertyItems classQtはGDIplusでjpegイメージのexif値を読み取ることができません(id、type、length working)

私はすべてのプロパティ項目をロードし、テストのためtextBrowserでそれを表示することができます:

PropertyItem* pAllItems = (PropertyItem*)malloc(totalBufferSize); 
image->GetAllPropertyItems(totalBufferSize, numProperties, pAllItems); 
... loop ... 
ui->textBrowser->append(QString::number(pAllItems[xxx].id));  
ui->textBrowser->append(QString::number(pAllItems[xxx].type)); 
ui->textBrowser->append(QString::number(pAllItems[xxx].length)); 

だから私が働いて私のEXIFデータとのthatsのID、タイプと長さを見ることができましたすばらしいです。

しかし、私はPropertyItemの値を読み取ることができません。データ型は異なり、型でチェックすることができます。 私はEXIFデータの時間を(ID == 0x9003)読みたい、タイプが2(have a look)で、長さが20

マイクロソフトは書いている:

は価値があることを指定しますヌルで終了するASCII文字列。タイプ・データ・メンバーをASCIIタイプに設定する場合、Lenプロパティーにヌル終端文字を含む文字列の長さを設定する必要があります。たとえば、文字列「こんにちは」は6

の長さを持つことになり、私はこのような非常に多くの方法を試みた:

QByteArray propItem = pAllItems[xxx].value; 

をしかし、私は間違って何をすべきかを知りません。 Qtはそれをコンパイルdidntの:

C2240: "Initalisation": 'void *型は' 'QByteArray'

に変換することができない私は、コンパイラが何を意味するか知っていると思うが、私は解決するための任意のアイデアを持っていませんでしそれ。誰かが私を助けてくれたら嬉しいです。ありがとう。

+0

QtはC++であるが、それはプログラミングではありません言語や方言。コンパイラを使わないVisual Studio C++コンパイラでした。 –

+0

C++プログラムの 'malloc' !? – MrEricSir

答えて

0

タイプが文字列の場合は、あなたがnullで終わるASCII文字列へのポインタを意味するvalueを再解釈する必要があり、正確に文書としてあなたが引用した状態:

for (auto i = 0; i < numProperties; ++i) { 
    auto const & property = pAllItems[i]; 
    ui->textBrowser->append(QString::number(property.id));  
    ui->textBrowser->append(QString::number(property.type)); 
    ui->textBrowser->append(QString::number(property.length)); 
    auto valueStr{QStringLiteral("value of an unhandled type")}; 
    switch (property.type) { 
    case PropertyTagTypeASCII: 
    valueStr = QString::fromLatin1(reinterpret_cast<const char*>(property.value), 
            property.length); 
    break; 
    case PropertyTagTypeByte: 
    valueStr = QString::number(*reinterpret_cast<qint8*>(property.value)); 
    break; 
    // etc. 
    default: 
    break; 
    } 
    ui->textBrowser->append(valueStr); 
} 
+0

ありがとうございました!!! –

関連する問題