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

安藤忠雄ふたたび

今年も安藤忠雄の講演を聞きに行くことにした。 去年、建築家・安藤忠雄に魅せられて、そのタイトルのハードカバーの 本を買って読んでみたくらいだ。 震災後、彼は何を考えて、どんな活動をしているのか知りたい …

no image

循環参照

AutoCAD外部参照の話。 AとB、2つの図面があったとする。 Aを配置しているBを、Aに配置する。 循環参照の出来上がり。 EXCELでは聞いたことがあるが、AutoCADにもあることを知った。 …

no image

AutoCAD2011

今年もこの季節がやってきた。 3/19、AutoCAD2011リリース。 ADN会員の特権を生かして、AutoCAD2011製品版をインストールしてみた。 いろいろと機能強化が行われているようだが、3 …

no image

DWGdirect 2.4.0

いよいよ本格的な2008DWG対応が行われたようだ。 DWGdirect 2.4.0 Beta. Sustaining Member向けにBeta版が公開された。 Neil から英語の短いメールが届き …

no image

レイアウトのモデル化

レイアウトをモデルに変換するプログラムってどんだものだったかと、 忘れかけた記憶を呼び戻して書いてみる。 1.全レイアウト名取得  ブロックセクションからブロックレコードを全部読む。  レイアウトフラ …