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.