Bonjour,
je recherche un algorithme discret qui me permettrait de construire une grande image à partir de plein de petites images qui ont chacune une taille donnée, en perdant le moins d'espace possible au final.
Merci
Bonjour,
je recherche un algorithme discret qui me permettrait de construire une grande image à partir de plein de petites images qui ont chacune une taille donnée, en perdant le moins d'espace possible au final.
Merci
Merci, je ne connaissais pas.
Cependant je pense que mon problème est légèrement différent:
La définition du problème knapsack accepte en entrée des listes d'objets pondérés et le poids total maximum et recherche combien d'objets de chaque type peuvent rentrer.
Mon problème est plutôt de trouver la taille minimale capable de faire rentrer toutes mes vignettes et aussi de déterminer un layout pour les agencer les unes par rapport aux autres.
J'avoue ne pas avoir trouvé grand chose avec "layout algorithm", pourtant ces mots clefs semblaient tout à fait à propos.
En revanche une recherche avec "sprite packing" m'a permis de trouver cet article : http://www.codeproject.com/Articles/...gorithm-for-bu
Après quelques tests, ça marche pas mal du tout et c'est très rapide.
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 Canvas canvas = new Canvas(); MapperOptimalEfficiency<Sprite> mapper = new MapperOptimalEfficiency<Sprite>(canvas); RandomSizeGenerator rd = new RandomSizeGenerator(10, 200, 100); List<ImageInfo> imgs = new List<ImageInfo>(); for (int i = 0; i < 100; i++) { imgs.Add(rd.Next()); } Sprite s = mapper.Mapping(imgs); var rnd = new Random(); using (Bitmap bmp = new Bitmap(s.Width, s.Height)) using (Graphics gr = Graphics.FromImage(bmp)) using (Pen pen = new Pen(Brushes.Black)) { foreach (var r in s.MappedImages) { gr.DrawRectangle(pen, r.X, r.Y, r.ImageInfo.Width, r.ImageInfo.Height); gr.FillRectangle(new SolidBrush(Color.FromArgb(rnd.Next())), r.X, r.Y, r.ImageInfo.Width, r.ImageInfo.Height); } bmp.Save("D:\\toto.bmp"); }
Merci à vous deux pour m'avoir mis sur la piste.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager