プログラムからキャンバスに点を打ちます。
コードは、NOAA/NGDC/MGG-GLOBE Project (Global Land One-km Base Elevation) Home Pageから入手した標高データからグレースケールで1×1のピクセルで描画するようになっています。詳しくは、作例を見てください。
このコード中チェックポイントをどんどん変更してしまいます。(ないとは思いますが)チェックポイントを保存したい方はその時点での別名保存などで対処してください。1ピクセルずつ色を変えながら描画する関係で、点の数だけチェックポイントからの変更点が保存され、テンポラリがいくらあっても足りないからです。
コード中ファイルからデータを読んで描画位置と色を決定する部分を変更すれば、たとえば何かの関数で描画することも可能です。
Attribute VB_Name = "autodraw" Option Explicit Sub psetdots() Rem Corel PHOTO-PAINTで作成されていますVersion 10.410 Rem 作成 : 2001年11月20日 21:16 / Albatross1 Dim px As Long, py As Long Dim c As Long Dim buff As Integer Dim DH As Long, DW As Long, DP As Long With ActiveDocument DH = .SizeHeight DW = .SizeWidth Open "C:\TEMP\mydata.bin" For Binary Access Read As #1 For py = 1 To DH For px = 1 To DW Get #1, , buff If buff > 1270 Then c = 255 ElseIf buff < 0 Then c = 0 Else c = Int((buff * 2) / 10) + 1 End If psetdot px - 1, py - 1, c Next px .Checkpoint Next py Close #1 End With End Sub Private Sub psetdot(x As Long, y As Long, ci As Long) With PHOTOPAINT.CorelScript .BrushTool 6, 0, 0, 100, 1, 1, 0, 0, 100, 25 .SetPaintColor 9, ci, ci, ci, 0 .StartDraw x * 256, y * 256, 0, 0, 0, 0 .EndDraw End With End Sub
作例
Shadeを入手したのでなにか立体的なものを描こうと考えている折り、The Global Land One-km Base Elevation (GLOBE) Projectで世界の標高データを入手することができることを知りました。
ギャラリーにはこれに基づいて加工されたいろいろな画像も展示されていますが、範囲が広すぎて自分の使用には適さない感じです。で、カスタムエリアとして中国・四国地方がカバーできる範囲を取得しPHOTO-PAINTでのグレースケールから最終的にShadeでレンダリングをしました。
厳密なことをいうと、緯度が高いところと低いところで縦横のピクセル比を同じにして描画すると正しい投影ではなくなるのですが、そこまでするのは大変なのと、autodrawの主目的からはずれるので、手抜きしました。
この作例は2002年の年賀状の背景に使ったものです。PHOTO-PAINTでの描画
カスタムエリアとして中国・四国地方がカバーできる範囲を取得しました。
このデータは、0.5分刻みで指定した範囲の左上から横に範囲右上まで、順次下へという並びで標高データが収録されています。同サイトでは、Photoshopを使ってRAW形式で取り込む方法を紹介し、カラーパレットも配布されていましたが、探した範囲ではPHOTO-PAINTにはRAW形式のインポートはなかったので、今回のautodrawを作成しました。
描画サイズは、編集対象ファイルのサイズに従うことにしました。取得データのサイズに応じてあらかじめ新規ドキュメントを作成します。取得したデータの参考資料を基にグレースケールの分割を設定します(コード中)。
800KB程度のファイルなのですが、全部読み込んで描画するのに5時間近くかかってしまいました。~VBやDelphiでプログラムが書けるのなら、そっちの方が早い!実際Delphiでこれを作ったら、本当にファイルをロードする時間で描画完了しちゃった。PHOTO-PAINTに1点づつ打たせるということをさせる自体がいかに間抜けなことかよくわかりますね。(苦笑)~マスクの作成
作成した画像はShadeでのレンダリングでバンプマップとして利用します。この他に、トリム用のマスクも必要ですから、陸地(グレースケールで0以外の部分)のマスクを作成します。
2色トーン化
拡散反射用のカラーマップを作成する必要があるので、先のグレースケール像を2色トーン化します。0の海部を除いて緑から茶色に変わるように設定しました。海部はトリムしてしまいますが、わかりやすくするため、水色に塗ってあります。
レンダリング
縦横の比率が元画像と同じサイズの長方形を作り、イメージを貼り付けます。これまで作成したグレースケールをバンプ、2色トーンを拡散反射、陸マスクをトリムとして設定し、レンダリングします。