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

Lazarus Pascal Discussion :

Problème lors de création de bitmaps [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Problème lors de création de bitmaps
    Bonjour,

    Suite à des recommandations, j'ai utilisé des images de type tlazintfimage (plus rapides que les tbitmap pour le traitement de pixels) dans mon programme. Mais de manière extrêmement aléatoire j'ai une erreur :
    FPImageException: 'failled to create handles'
    Si on suit l'endroit où le débugeur nous envoie, ça me met dans 'Intfgraphics' à la fonction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TLazIntfImage.CreateBitmaps(out ABitmap, AMask: HBitmap; ASkipMask: boolean);
    begin
      if not RawImage_CreateBitmaps(FRawImage, ABitmap, AMask, ASkipMask)
      then raise FPImageException.Create('Failed to create handles');
    end;
    Donc j'en déduis que c'est quand je fais un passage d'un tlazintfimage à un tbitmap que cela crée cette erreur.
    Mais je n'ai aucune idée de ce qui crée cette erreur (sur internet, je n'ai trouvé que le fait de mal définir le tlazintfimage mais j'ai pris ma méthode du wiki et en vérifiant elle semble correcte).
    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
    var alazintimtankeface:tlazintfimage;
     
    procedure ctableauimage.initialiseimageevolutivetankeface;
    var  lRawImage: TRawImage;
         i,j:integer;
    begin
      // create a TLazIntfImage with 32 bits per pixel, alpha 8bit, red 8 bit, green 8bit, blue 8bit,
      // Bits In Order: bit 0 is pixel 0, Top To Bottom: line 0 is top
      lRawImage.Init;
      lrawimage.Description.Init_BPP32_B8G8R8A8_M1_BIO_TTB(0,0);
      lRawImage.CreateData(false);
      alazintimtankeface:= TLazIntfImage.Create(0,0);
      try
        alazintimtankeface.SetRawImage(lRawImage);                       // Load an image from disk.
        alazintimtankeface.LoadFromFile('./images/image_bonhomme/imagebasetankeface.bmp');   // It uses the file extension to select the right registered image reader.
        debugln(['imagecreator ',alazintimtankeface.Width,' ',alazintimtankeface.Height]);        // The AImage will be resized to the width, height of the loaded image.
      finally
      end;
    end;
    Avec le fait que je n'ai aucune idée du format de mes images. Je ne sais pas si c'est ça qui crée le problème mais vu que je pense que c'est juste pour la taille de la plage mémoire, j'ai mis le format le plus grand possible (pour le trawimage). Juste pour préciser, j'ai testé avec d'autres format (avec ou sans le M1 dont je n'ai aucune idée de la signification).

    Après, pour afficher mon image je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     procedure ctank.effacetank(acanvas:tcanvas;matcol:cmatricecollision);
     var i,j:integer;
        bitmappassage:tbitmap;
    begin
      imageevolutivetankeface(matcol); //fait des modification sur le tlazintfimage
      bitmappassage:= tbitmap.Create;
      bitmappassage.LoadFromIntfImage(tableaudimage.alazintimtankeface);
     aCanvas.draw(fx0-8,fy0-5,bitmappassage); //fx0 et fy0 sont des coordonnées entières
    end;
    Là encore, le seul truc que je peux faire en plus c'est de définir la taille de bitmappassage avant de m'en servir mais je pense pas que cela changera grand chose.

    Et donc voilà, de temps à autre (ça peut être 20 min comme 15s) je reçois la fpimageexeption qui fait crasher le programme.

    Donc je crée ce post en espérant que quelqu'un sache comment se débarrasser de ce problème.

    ps: juste pour préciser, je suis sous Windows 7 si cela a une importance.

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 876
    Points : 11 362
    Points
    11 362
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Il me semble que tu crées beaucoup d'images que tu ne libères pas après usage => n'y a-t-il pas dépassement du nombre de Handles que l'OS peut gérer ?

    Essaye en libérant les BitMaps devenus inutiles ; par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     procedure ctank.effacetank(acanvas:tcanvas;matcol:cmatricecollision);
     var i,j:integer;
        bitmappassage:tbitmap;
    begin
      imageevolutivetankeface(matcol); //fait des modification sur le tlazintfimage
      bitmappassage:= tbitmap.Create;
      bitmappassage.LoadFromIntfImage(tableaudimage.alazintimtankeface);
     aCanvas.draw(fx0-8,fy0-5,bitmappassage); //fx0 et fy0 sont des coordonnées entières
      bitmappassage.Free; // un de moins !
    end;

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Bon d'accord j'avais même pas imaginé que yen avait un nombre limite...

    Je précise j'avais fait le bitmappassage.free; sur quasiment toutes mes images sauf 2. je vais tenter d'optimiser le programme pour bien supprimer toutes les images quand je m'en sert plus.

    Mais c'est bizare quand je regarde les nombre limites de handles pour un programme sur intenet je trouve des nombre très différents (si quelqu'un a un truc pour pouvoir le connaitre je suis preneur). Ya des chances que ce soit mon problème car pour éviter le lag je charge un maximum d'image au début du programme.

    Si quelqu'un pense à autre chose qui peut provoquer cette erreur je suis toujours preneur.

    EDIT: bon j'ai plus de bug donc je suppose que c'est bon

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème lors de création d'un .exe sous Borland6
    Par klad13 dans le forum C++Builder
    Réponses: 2
    Dernier message: 23/01/2009, 10h53
  2. problème lors de création d'un projet ASP.Net
    Par fifidante dans le forum ASP.NET
    Réponses: 2
    Dernier message: 15/02/2008, 23h33
  3. [SQL Server 2005]problème lors du création d'un nouvel utilisateur
    Par etoile_de_vie dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 08/08/2007, 16h05
  4. [10G] Problème lors de création de tables et champs
    Par keiserjo dans le forum Oracle
    Réponses: 7
    Dernier message: 28/09/2006, 12h14
  5. problème lors de création d'une vue
    Par gapse dans le forum Oracle
    Réponses: 7
    Dernier message: 26/07/2006, 12h59

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