2010-11-29 22 views
0

私は迷子で方向性が必要です。ユニファイドキャンバスに多くの画像を効率的にレンダリングする

ImageMagickを使用して、小さな画像(X)を単一のキャンバスにレンダリングしようとしています。

異なるXは、それぞれ20x20,40x40,60x60,80x80または100x100の5つの異なるサイズのいずれかになります。大きな画像の幅は常に600に設定されていますが、必要に応じて高さを調整できます。

任意の瞬間に10個または10,000個のXを使用できます。

現在、我々が取り組んでいる概念の最低限の証拠のようなものになる:

images.each do |image| 

     image = Magick::Image.read("#{RAILS_ROOT}/public/images/#{image}").first 

     w = image.columns 
     h = image.rows 

     pixels = image.export_pixels(0, 0, w, h, "RGB") 

     img.import_pixels(x, y, w, h, "RGB", pixels) 

     x += w 

end 

を...それは簡単で、愚かだが、それは、一連の画像を一つにマージされた出力を行います。ほぼそこに;-)

多くのXを繰り返し処理し、複数の行にまたがってスペースを最適化できる有効なアルゴリズムを知っている人はいますか? ここでの目標は、すべての小さな画像で構成された空白のない単一の画像を作成することです。

前述のように、私は皆さんのご意見をお待ちしております。ポインタ?アイデア?例?

ありがとうございました。

答えて

0

今のところ画像はノイズのようです。あなたはタイルの問題を解決したい。タイルには固定サイズがいくつかあり、それらを固定幅と最小高さの表面に配置したいとします。これは、DFS、BFS、A *などでグローバルに行うことができます。グローバル最適化または妥当な妥当なソリューションが必要かどうかに応じて、シミュレーテッドアニーリングやヒルクライミングなどのローカルメソッドを見ることもできます。これらのメソッドの実装はonline source repository for AIMAにあります。

タイルの問題を解決したら、表示しているものと同様のコードで画像を重ねることができます。

+0

返信いただきありがとうございますcarlosdc!私はあなたが役に立たないと言っているメソッドのリファレンス実装を見つけるために朝を過ごしてきました。何か覚えていますか?再度、感謝します。 –

+0

少し私の答えを編集しました。 – carlosdc

関連する問題