Размещение изображений в холсте коллаж - PullRequest
1 голос
/ 28 апреля 2010

У меня есть массив изображений разных размеров. Я хочу разместить эти изображения на холсте в виде автоматизированного коллажа. У кого-нибудь есть идеи, как работать с логикой этой концепции?

Все мои изображения имеют высоту, кратную 36 пикселям, а ширину, кратную 9 пикселям. У них есть функции mouseDown, которые позволяют перетаскивать. При отбрасывании изображение переходит в ближайшую точку x, делимую на 9, и точку y, делимую на 36. Сверху холста рисуется сетка.

Я отсортировал массив изображений по высоте, а затем по их ширине.

imagesArray.sortOn ("высота", Array.NUMERIC | Array.DESCENDING); imagesArray.sortOn ("width", Array.NUMERIC | Array.DESCENDING);

Я хотел бы взять самое большое изображение (imageArray [0]), чтобы поместить его в угол x, y = 0,0. Затем перемешайте остальные изображения и поместите их в холст коллажа.

Ответы [ 4 ]

1 голос
/ 29 апреля 2010

Я думаю, что это то, что известно как " проблема упаковки " или, может быть, " проблема упаковки 2D бункера ". Погуглив эти, вы должны найти некоторую информацию, делать это эффективно - непростая задача. Если у вас есть только небольшое количество изображений, простыми методами будут:

  1. Случайно ... просто случайным образом размещайте изображения до тех пор, пока они не поместятся. Выполните это случайное размещение 10..100..1000 или более раз и выберите лучший результат (где «лучший» определяется некоторыми критериями, такими как наименьшее количество потерянного места или большинство изображений подходят и т. Д.)

  2. Грубая сила ... попробуйте каждую возможную комбинацию, одну за другой, и выберите "лучшую". Недостатком этого метода является то, что по мере увеличения количества элементов объем вычислений очень быстро увеличивается.

1 голос
/ 28 апреля 2010

То, что вы пытаетесь сделать, звучит как treemapping .

0 голосов
/ 17 октября 2014

Я сделал другой вывод: я просто подгоняю все изображения под размер плитки и помещаю их в документ. Изображение виртуально обрезается до размера файла с помощью маски слоя. Вставить скрипт рулона изображения http://www.mouseprints.net/old/dpr/PasteImageRoll.html http://www.mouseprints.net/old/dpr/PasteImageRoll.jsx

0 голосов
/ 07 мая 2010

Я исследовал проблемы картографии и упаковки. .... и в конце концов решил создать массив всех точек на холсте, а затем присвоить им значение пусто. Затем я перебрал свой массив изображений и поместил их в точки, которые были «пустыми», и переназначил все точки, которые он занимал, с исходным именем изображения. Это работало прекрасно. Но определенно требуется время для создания массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...