mieki256's diary



2015/12/24(木) [n年前の日記]

#1 [dxruby] スキャンラインシードフィルによる塗り潰しの実験

Ruby + DXRuby を使って実験。

_スキャンラインシードフィルによる塗り潰しの実験
_スキャンラインシードフィルの実験その2(アルゴリズム高速化版)

以下のような感じで動作確認できる。
ruby scanlineseedfill.rb TEST.PNG
画像内をクリックすれば塗り潰しができる。

以下、参考ページ。

_ペイント・ルーチン (1)シード・フィル アルゴリズム
_JavaScript, Canvas スキャンライン・シードフィル アルゴリズムによる塗り潰し : Serendip - Webデザイン・プログラミング

#2 [dxruby] キャラグラエディタのバケツツールが動くようになった

バケツツールが動かなかった理由が分かった。ハッシュを2次元配列に入れて、各ハッシュと比較して領域色か非領域色かを判別してたのだけど、ハッシュを浅いコピーで取り出してたから ―― 要するにポインタをコピーしてたから、おかしなことになってた。

指定された座標に対応するハッシュをコピーして、そのハッシュと、他の座標のハッシュと比較していくのだけど。その最初の指定座標を塗りつぶしてしまうと、領域色として扱うべきハッシュ内容が変わってしまうので、その後の比較が全部おかしくなるという。

最初の座標のハッシュは深いコピーで取り出さないといけない。

_Marshalで配列やハッシュをディープコピーする - Ruby Tips!

a = Marshal.load(Marshal.dump(hoge)) みたいな。

ちなみに Ruby 2.0 では、require 'marshal' を書くとエラーが出てしまった。いきなり Marshal.load(Marshal.dump(hoge)) と書いても動いてるので、基本機能(?)として取り込まれたのかなと想像していたり。

以上、1 日分です。

過去ログ表示

Prev - 2015/12 - Next
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project