IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

mémoire insuffisante pour charger une image


Sujet :

C++Builder

  1. #1
    Membre régulier Avatar de benj63
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 207
    Points : 99
    Points
    99
    Par défaut mémoire insuffisante pour charger une image
    Bonjour,

    Je manipule des images PNG (plan de sites), en dessinant dessus différentes figures (bâtiments, etc).

    Pour les PNG, j'utilise l'unité pngimage.hpp fournie avec Borland C++ Builder 6.

    Je travaille uniquement avec des TBitmap, en traçant sur leur Canvas avec LineTo, Ellipse, Rectangle etc..., et j'utilise la fonction suivante pour charger un PNG de base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    TBitmap *bmp = new TBitmap();
    bmp->PixelFormat = pf24bit;
    TPNGObject *png = new TPNGObject();
    png->LoadFromFile("fichier.png");
    bmp->Assign(png);
    delete png;
    Le problème survient lorsque j'utilise des png d'une certaine taille (supérieures à 3000*3000 pixels). Sur certains postes disposant de suffisamment de mémoire vive, cela fonctionne, sur d'autres, bmp->Width me retourne "0" à l'issue de la fonction ci-dessus, car le png n'a pas pu être chargé en mémoire.

    Y'a-t'il un moyen de contourner ce problème ? J'ai essayé de paramétrer les valeurs de "pile" dans les options du compilateur, mais ça n'a rien changé.

    Je comprends que cela soit gros en mémoire lorsqu'on manipule un bitmap d'une certaine taille... Sinon, n'y a-t'il pas moyen d'utiliser directement des PNG (qui sont bcp moins lourds en espace mémoire, de l'ordre de 2 Mo pour une image de 4000x4000 pixels) ?

    En vous remerciant par avance !

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    bmp->PixelFormat = pf8bit;
    Cela aurait l'avantage de diviser par 3 la mémoire nécessaire.
    Celà dit, reste le problème de la palette puisque tu ne disposeras plus que de 256 couleurs pour ton bitmap !

    A plus !

  3. #3
    Membre régulier Avatar de benj63
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 207
    Points : 99
    Points
    99
    Par défaut
    Salut,

    J'ai malheureusement déjà essayé cette solution et ça n'a pas réglé mon problème... La mémoire était tjs "insuffisante". N'y-a-t'il pas d'autre moyen de gérer la mémoire utilisée par Windows pour le chargement du bitmap ? Les logiciels de dessin parviennent bien à afficher de grosses images...

    Merci pour vos idées !

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    Il y a aussi l'idée de ne traiter qu'une partie du bitmap (celle qui est affichée par exemple).
    Dans ce cas, on ne charge, modifie et sauvegarde que cette zone.
    Ca ne peut se faire qu'après avoir fait un tour sur WOTSIT (avec GOOGLE) pour bien comprendre la manière dont un bitmap est mis en fichier (*.bmp).
    A partir de cette organisation des données, ça ne devrait être qu'une question de développement !

    En ce qui concerne les logiciels de dessin, on peut supposer qu'ils travaillent non pas avec des bitmaps mais avec des objets graphiques qui se dessinent là où il faut.

    A plus !

Discussions similaires

  1. [CS5] Problème pour charger une image en fond
    Par Poulki dans le forum ActionScript 3
    Réponses: 4
    Dernier message: 18/11/2010, 10h11
  2. Mémoire Insuffisante pour une macro simple
    Par ted the Ors dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 08/09/2008, 12h02
  3. Réponses: 5
    Dernier message: 14/05/2006, 12h57
  4. Réponses: 13
    Dernier message: 23/12/2004, 18h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo