Bonjour,
Je viens de développer une application d'indexation des images. J'ai besoin d'une fonction qui affiche 16 images aléatoirement à partir d'un dossier de 100 images.
SVP aidez moi c urgent![]()
Bonjour,
Je viens de développer une application d'indexation des images. J'ai besoin d'une fonction qui affiche 16 images aléatoirement à partir d'un dossier de 100 images.
SVP aidez moi c urgent![]()
Bonjour,
quel est le code existant ?
Où bloques-tu ?
As-tu la liste des 100 images ? Ou uniquement le répertoire à lister toi-même ?
Ne sais-tu pas utiliser rand ?
Attends-tu le code complet ? Auquel cas ton attente risque d'être longue, et le caractère "urgent" n'aide en rien à sa résolution.![]()
Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
Un peu de programmation réseau ?
Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.
voici la fonction que j'utilise pour afficher 16 images
j'utilise une fonction pour selectionner le repertoire qui contient les images. J'ai arrivé à afficher les 16 premiers images mais je veux que les images soient aleatoires. La fonction rand choisit un seul entier aleatoir, je veux 16 entiers differents.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 for(int i=0;i<4;i++) {for(int j=0;j<4;j++) { QLabel *image2 = new QLabel; image2->setPixmap(QPixmap(pathImages->at(i))); image2->resize(QSize(100,100)); imageGrandeLayout->addWidget(image2,i,j); } }
Et si tu appelais 16 fois rand() ?
Si le risque de dupicata te gène, alors tu n'as qu'à stocker la liste des appels à rand que tu as déjà effectués, pour retirer un nombre au hasard s'il est déjà dans la liste. (Bon, d'accord, ce n'est pas du tout optimisé, mais ... C'est suffisant, je pense.)
Voilà ce qui peut être fait, très simple, sur l'idée de Ekleog
Sauf erreur, ça marche
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 std::vector<int> createList(int nb) { std::vector<int> imgIds; for (int i = 0; i < nb; ++i) imgIds.push_back(i); return imgIds; } int getUniqueIdFromList(std::vector<int>& list) { int id = rand() % (list.size()); int rv = list[id]; list.erase(list.begin() + id); return rv; }
edit: ta fonction pour afficher 16 images, n'en affiche que 4 différentes..?
Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
Un peu de programmation réseau ?
Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.
Avec une complexité en O(kn) (k nombre d'images à afficher et n nombre d'images en tout) à cause des écrasements au milieu.
L'utilisation d'un set en lieu et place du vector permettrait de passer à du O(k log n).
Et un unordered_set permettrait de passer en moyenne à du O(k).
![]()
Partager