Bonjour à tous

Dans mon application j'ai à afficher #255000 points représentés par une icone.

Dans un cas, je prends un fichier .bmp de 32x32 pixels et j'ai une charge en mémoire de 162 Mo pour tous ces points.

Dans un second cas, je crée l’icône à partir d'un QPixmap, d'une taille de 38x38 pixels, car j'y rajoute un texte de 1 à 5 caractères. La mémoire est alors saturée pour finir par une erreur d'allocation tellement ça déborde de partout.

Voici le code de création de l'icône :
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
16
17
18
19
20
21
22
 
QPixmap GenIcone::wayPoint(QString code)
{
    QPixmap *pm = new QPixmap(38,38);
    pm->fill(Qt::transparent);
    QPainter *pmp = new QPainter(pm);
    pmp->setRenderHint(QPainter::Antialiasing);
    pmp->setBrush(Qt::cyan);
    pmp->setPen(Qt::black);
    static const QPoint triangle[3] = {
        QPoint(15,0),
        QPoint(3, 20),
        QPoint(27,20)
    };
    pmp->drawPolygon(triangle, 3);
    pmp->setFont(QFont("ArialBold",12));
    pmp->drawText(1,32,code);
    pmp->end();
 
    return *pm;
 
}
elle est appelée par ce code :

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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
    //Parser du fichier Waypoints
    QTextStream in(&file);
 
    while(!in.atEnd()) {
        QString line = in.readLine();
        QStringList fields = line.split(",");
 
        //Création du point et ajout au calque
 
        //*********************************************
        //Structure du fichier Waypoints
        //Col0 = CODE (1 à 5 CHAR)
        //Col1 = LATITUDE
        //Col2 = LONGITUDE
        //Col3 = PAYS (2 CHAR null si rien)
        //*********************************************
 
        QString str = fields.at(1);
        double latitude = str.toDouble();
        str = fields.at(2);
        double longitude = str.toDouble();
        str = fields.at(0);
 
        // Choix de l'icone
        //icone = new QPixmap(QCoreApplication::applicationDirPath() + "/Images/Point.bmp");
        icone = new QPixmap(GenIcone::wayPoint(str));
 
        Point* pointCourant = new Point(longitude, latitude, *icone, str);
        waypoints->addGeometry(pointCourant);
    }
 
    file.close();
Aurais-je oublié de fermer/supprimer quelque chose ou y a-t-il une si grande différence d'utilisation mémoire entre les deux façons de procéder ?

Merci pour votre aide.