none
RichTextFile(RTF) 大きい画像を張り付けた場合のヘッダーに付加されるサイズ情報について RRS feed

  • 質問

  • RichTextFile(以下RTFと記述)に大きいサイズのビットマップ画像を張り付け、そのRTFを独自フォーマットに変換するソフトを作成しているのですが、2048(w)×16(h)pixel以上のBMPを張り付けた場合、RTFのpictureヘッダー部分の"picw"と"picwgoal"がマイナス表記になってしまいます。

    マイナス表記になっていても再度開けばちゃんとBMPは表示されてます。

    Picture Size, Scaling, and Croppingヘッダーの"picw"、"pich"、"picwgoal"、"pichgoal"の算出方法がお分かりになる方がいらっしゃいましたら教えて頂けますでしょうか。

    どうぞよろしくお願いします。

    2012年12月21日 12:10

回答

  • たぶんRich Text Formatの規格書などは見られていて、その計算方法がわからないということですよね?

    picw,pichはMetaFileの寸法で0.01mm単位の値のようです。
    picw = W[pixcel] / xdpi * 25.4 * 100
    pich = H[pixcel] / ydpi * 25.4 * 100

    picwgoal,pichgoalはtwips単位[inch/1440]のようです。
    picwgoal = W[pixcel] / xdpi  * 1440
    pichgoal = H[pixcel] / ydpi  * 1440

    画像のdpiですが、dpi情報がないとディスプレイのdpiが使われています。
    ディスプレイが120dpiに設定されているなら120dpiで計算されています。
    (dpi付の画像は試してません)

    得られた値は、RTFの新しめの規格だと符号付32bitと定義されてますが、古い規格だとそれぞれの値の範囲が未定義だったもよう。
    規格が未定義だったので実装に符号付16bitを使っていたんでしょうね。そのため32767を超えると負数になってしまうようです。

    WindowsFormのRichEditやMFCでRichEdit2.0をためしたところ、符号付16bitの値が得られました。
    WPFのRichEditをつかうと32bitっぽい値がえられました。
    Wordでも32bitぽいです。WordPadだと混在しているような…

    16bitか32bitかわからない状態で解析するのなら、画像をデコードして寸法を得た方が近道かもしれません。


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答の候補に設定 佐伯玲 2012年12月25日 0:44
    • 回答としてマーク 佐伯玲 2012年12月28日 6:57
    2012年12月24日 11:40

すべての返信

  • たぶんRich Text Formatの規格書などは見られていて、その計算方法がわからないということですよね?

    picw,pichはMetaFileの寸法で0.01mm単位の値のようです。
    picw = W[pixcel] / xdpi * 25.4 * 100
    pich = H[pixcel] / ydpi * 25.4 * 100

    picwgoal,pichgoalはtwips単位[inch/1440]のようです。
    picwgoal = W[pixcel] / xdpi  * 1440
    pichgoal = H[pixcel] / ydpi  * 1440

    画像のdpiですが、dpi情報がないとディスプレイのdpiが使われています。
    ディスプレイが120dpiに設定されているなら120dpiで計算されています。
    (dpi付の画像は試してません)

    得られた値は、RTFの新しめの規格だと符号付32bitと定義されてますが、古い規格だとそれぞれの値の範囲が未定義だったもよう。
    規格が未定義だったので実装に符号付16bitを使っていたんでしょうね。そのため32767を超えると負数になってしまうようです。

    WindowsFormのRichEditやMFCでRichEdit2.0をためしたところ、符号付16bitの値が得られました。
    WPFのRichEditをつかうと32bitっぽい値がえられました。
    Wordでも32bitぽいです。WordPadだと混在しているような…

    16bitか32bitかわからない状態で解析するのなら、画像をデコードして寸法を得た方が近道かもしれません。


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答の候補に設定 佐伯玲 2012年12月25日 0:44
    • 回答としてマーク 佐伯玲 2012年12月28日 6:57
    2012年12月24日 11:40
  • こんにちは、じょーいちろう さん
    フォーラムオペレータの佐伯 玲 です。

    寄せられた情報はご確認いただけましたでしょうか?
    gekka さんからの情報が参考になると思われましたので勝手ながら私のほうで「回答としてマーク」とさせて頂きました。

    ご確認のほど宜しくお願いいたします。
    __________________________
    日本マイクロソフト株式会社 フォーラム オペレータ 佐伯 玲

    2012年12月28日 6:57