Возможно Вы ищете что-то вроде этого: Автоматическое Расположение Журнала.
Appearantly, который это назвало 'проблемой упаковки', которая является чем-то часто используемым в игровом программировании. Для заинтересованных, вот некоторые предложенные реализации:
Упаковывая Карты освещенностей, Прямоугольную упаковку и Прямоугольное Размещение
Я создал алгоритм для этого, это - на самом деле вариант NP-трудныйУпаковка мусорного ведрапроблемы , но с бесконечным размером мусорного ведра.
Вы могли попытаться найти некоторые статьи об этом и попытаться оптимизировать Ваш алгоритм, но в конце это останется грубой силой способ попробовать каждую возможность и попытаться минимизировать получающийся размер мусорного ведра.
Если Вам не нужно лучшее решение, но всего одно решение, Вы могли бы избежать скота, вызывающего все комбинации. Я создал программу, которая сделала это однажды также.
Описание:
Images: array of the input images
ResultMap: 2d array of Booleans
FinalImage: large image
ResultMap используется, чтобы быстро проверить, можно ли соответствовать изображению на текущем FinalImage. Вы могли оптимизировать его, чтобы использовать int32 и использовать каждый бит для одного пикселя. Это уменьшит память и увеличит производительность, потому что можно проверить 32 бита сразу (использующий маску). Но это станет более трудным, потому что необходимо будет думать о маске, которую необходимо будет сделать для краев изображения.
Теперь я опишу реальный цикл "алгоритма".
Это не оптимально, но это может решить проблему довольно оптимальным способом (особенно, если существует несколько меньших изображений для заполнения болтливостей в конце).
Вы, вероятно, ищете, ОТСЕИВАЮТ
Непрограмматическим способом можно использовать Вставку "функции MS Paint От" т.е. Вставку (JPEG) файл в mspaint область изображения. Используя это можно расположить отдельные изображения, и создать заключительное большое изображение и сохранить его как JPEG/GIF/Raw-BMP формат.
- AD.
Optimal packing is hard, but there might be simplifications available to you depending on the details of your problem domain. A few ideas:
If you can carve up your bitmaps into equally sized tiles, then packing is trivial. Then, on-demand, you'd reassemble the bitmaps from the tiles.
Sort your images largest to smallest, then, for each image use a greedy-allocator to select the first available sub-rectangle that fits the image.
Use a genetic algorithm. Start with several randomly-selected layouts. Score them based on how tightly they're packed. Mix solutions from the top scoring ones, and iterate until you get to an acceptable score.