2010-11-29 3 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

답장을 보내 주셔서 감사합니다. 나는 당신이 아무 소용이없는 언급하는 방법의 참조 구현을 찾으려고 노력하고 아침을 보내고있다. 너 마음에 뭔가 있니? 다시 한번 감사드립니다. –

+0

나는 내 대답을 약간 편집했다. – carlosdc

관련 문제