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

AutoCADの魅力

世界で一番有名なCAD、それがAutoCADです。CADの世界にいて、AutoCADを知らない人は絶対にいません。絶対という言葉を使う機会は少ない中、これだけははっきりと確信が持てます。 AutoCA …

no image

DWGのサムネイル

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

no image

OpenDWG

2次元CADのデータ交換で最も使われているのは、DWGです。少し前までは、DXFだったのですが、徐々にDWGに移行しています。SXFというものも流通し始めていますが、まだその比率は低いです。さて、その …

no image

画層のサムネイル

AutoCADの画層一覧(画層プロパティ管理)は、味気ない。 リスト形式しか存在せず、プレビュー画面もなければサムネイル表示もできない。 アドオン系のソフトでは、けっこうあるのではないかと調べたけれど …

ハッチングの境界データのスプラインをポリラインに分解する方法

dwgにおけるハッチングの表現はややこしくて、boundary(境界)オブジェクトが多階層化している。境界オブジェクトには大きく2つあって、1つの閉じたポリラインか複数のその他図形群かとなる。1つのポ …