Placeable metafile format のファイルを扱おうとしています。
具体的には、単色の画像の色を変更したいのですが、RGBの情報へ
どのようにたどって行けば良いのか解からず困っています。
いちおう既に話題になった下記は、参考にしています。
ヘッダー情報が22バイトあることは理解できました。
◆バイナリデータがメタファイルであると判断するには
http://madia.world.coocan.jp/vc/vc_bbs/200307_03070037.html
typedef struct _PlaceableMetaHeader
{
DWORD Key; /* Magic number (always 9AC6CDD7h) */
WORD Handle; /* Metafile HANDLE number (always 0) */
SHORT Left; /* Left coordinate in metafile units */
SHORT Top; /* Top coordinate in metafile units */
SHORT Right; /* Right coordinate in metafile units */
SHORT Bottom; /* Bottom coordinate in metafile units */
WORD Inch; /* Number of metafile units per inch */
DWORD Reserved; /* Reserved (always 0) */
WORD Checksum; /* Checksum value for previous 10 WORDs */
} PLACEABLEMETAHEADER;
>いちおう既に話題になった下記は、参考にしています。
とのことですが、
>http://www.wotsit.org/
>で「WMF」を検索すると表示される
>「Windows Metafile Format WMF/EMF/APM (html)」
>というものが参考になるかと思います。
この中にかなり詳しいことが書いてあると思いますが、それでは不足だったのでしょうか?
メタファイルってのはベクタ形式じゃありませんでしたっけ?
だとしたら RGB 情報は持っていないと思われます。
訂正:
どこかに持っているんでしょうが、BMP のようなピクセルの塊ではありません。
あるドットを特定するというのは難しいような気がします。
REE 様、シャノン様
返信ありがとうございます。
お恥ずかしい話ですが、英語の読解力不足もあってよく理解できなかったのです。
既存のWMFファイル(同一絵柄で色が違うもの)をバイナリエディタで
比較してみたところ、RGB情報の場所を見つけました。
しかしWMFファイルは、固定長のヘッダーレコード以降のGDI命令レコードは、
可変長であるらしくRGB情報は、決めうちでココという訳にはいかないようです。
全てのレコードを操作して、色に関わるレコードだけ、色の部分を変更することになるでしょうね。
幸いレコード毎に長さを持っているようですので、スキップするのは容易だと思います。
ツイート | ![]() |