2010-11-29 40 views
0

我迷路了,需要指導。高效渲染統一畫布上的許多圖像

我們試圖使用imagemagick將一堆小圖像(X)渲染到單個統一畫布上。

不同的X可以是五種不同尺寸之一:20x20,40x40,60x60,80x80或100x100。大圖像的寬度始終設置爲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!我一直在花費早上試圖找到你提到的方法的參考實現無濟於事。你有什麼想法?再次感謝。 – 2010-11-30 10:52:43