autodraw.bas

 プログラムからキャンバスに点を打ちます。
 コードは、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色トーンを拡散反射、陸マスクをトリムとして設定し、レンダリングします。

<<戻る