CAD日記

主にAutoCADのことについて書いているけど、近頃は投資系ネタに注力している。自動売買、仮想通貨、PC関係、プログラミングなど。@caddiary

AutoCAD DWG

dwgからサムネイル用画像を抜き出す方法

投稿日:

AutoCADのネイティブデータであるdwgファイルの中にサムネイル用画像があるという事実は、知る人ぞ知るハック。
昔々にネットから得た技術だが、CAD開発者の高齢化に伴って消えてなくなってしまった模様。
dwgはバイナリなので、どこにそんな情報があるんだというのを素人には解析できないため、非常にニッチなCAD開発者界隈では有益な情報となるだろう。

1.先頭4バイトでバージョンチェック
dwgの先頭4バイトで、dwgのバージョンをチェックするというのは常套手段なので界隈では有名な話。
AC1012やAC1032となっているので、この数字から古いバージョンをハネる必要がある。
AC1012はR13Jというバージョンで、これより小さい数字の場合はサムネイル用画像がないと判断して処理をやめる。

2.イメージ開始アドレス
dwgの先頭から13バイト目からの4バイトを符号なし整数で受けると、それがイメージ開始アドレスとなる。

3.イメージのブロック数とブロック
2で得たアドレスプラス20バイトにあるのがブロック数なので、1バイト符号なし整数で受ける。
21バイト目以降にブロックがあるので、ブロックの構造体で受ける。

4.ブロックの構造体
BYTE type; // タイプ 1:不明 2:ビットマップ 3:メタファイル 6:png
long lStart; // 開始アドレス
long lSize; // サイズ
以上3つの変数で受けてサイズ分オフセットしていくので、可変長のブロックであることがわかる。

実際にどんなデータが来るかの傾向を明らかにする。
R13Jで作ったと思われる古いdwgだと、ブロックの1つ目にタイプ2のビットマップが来た。
ビットマップのタイプとしてはDIBなので、画面に表示するならDDBに変換しておく必要あり。
AutoCAD 2026で2018形式で保存したdwgだと、ブロックの2つ目にタイプ6のpngが来た。
昔々のMFCではpngを扱えなかったので外部ライブラリを使うなんてメンドウな状況だったが、時代は変わり今ではCImageクラスで軽々と扱える。.NETならもピクチャーボックスでサクっと使える。

C++やC#(VB.netもか)のプログラマーならこれだけの情報で、dwgからサムネイル用画像を抜き出せるはず。
エクスプローラーのようなファイル一覧で、高速にサムネイル表示ができて、どのファイルがどんな絵なのかをユーザーに認知させることとなり、とっても有益な機能になること請け合い。
ぜひ実装してくれたまえ!

-AutoCAD, DWG

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

no image

DWGManager

エクスプローラスタイルDWGビューアだとさ。 http://apollo.yti.co.jp/system/ なかなか親近感の持てる製品だ。 ポイントをいくつか書いてみる。 [エクスプローラ風] フレ …

no image

DWGdirect訴訟

OpenDesignAlliance(以下ODA)がAutodeskに訴えられたそうだ。 DWGdirectライブラリがAUTODESKという登録商標を侵害している、と言って。 裁判所が一時差し止め命 …

no image

新DWGManager

DWGManager Ver1.0.4。 シェアウェア(5,355円)としてリリース生まれ変わったようだ。 前にこのブログで触れたときは、Ver0.8.1でフリーウェアだった。 バージョン0台はフリー …

no image

DWGのサムネイル

DWGdirectの話。 DWG内のサムネイルを何とかして残しておく方法はないか。 この命題に一応の決着がついたので記しておく。 DWGdirectライブラリを使った自作アプリで、 任意のDWGを開い …

no image

Teigha3.8

AutoCAD 2013が出てから半年ちょっとが経過。 3年ごとのデータ変更の年だったわけだが、まだ2013形式のDWGは 世にそれほど出回っていない。 なぜなら、2013形式データを読み書きできるの …