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は、おいらにとって原点でもあり敵でもある。 AutoCA …

no image

ビューポート優先プロパティ

AutoCAD2008から、ビューポート優先プロパティが利用可能になった。 通常、各種図形の色・線種・太さは、図形が持っている情報や画層が 持っている情報で表示されるわけだが、この機能を使うとビューポ …

no image

ハッチング

ハッチングには苦労させられます。 AutoCADのハッチングの話です。 境界図形群があって、中の模様(塗りつぶしの場合もあり)があって。 この境界図形群がくせものなんです。 ポリライン、線、円、円弧、 …

no image

Autodesk Solution Day 2008

もう1ヶ月以上が経過しているネタだが、いつか書こうと 思い続けて今に至る。 行ったときに書いたメモをわざわざ会社から持ち帰ってきたので、 区切りをつけるためにも、書いておくことにした。 Autodes …

no image

過去8年分のAutoCADリリース日から今年の2019リリース日を予測してみる

過去8年分のAutoCADリリース日。 2011:2010/03/19(金)→第3金曜日 2012:2011/03/16(水)→第3水曜日 2013:2012/03/16(金)→第3金曜日 2014: …