Erreur "espace insuffisant pour traiter cette commande" EoutOfResources
poirelotto
Messages postés3Date d'inscriptionvendredi 13 juin 2003StatutMembreDernière intervention20 février 2006
-
17 févr. 2006 à 16:15
DeltaFX
Messages postés449Date d'inscriptionlundi 19 avril 2004StatutMembreDernière intervention 8 avril 2009
-
20 févr. 2006 à 16:00
Bonjour a tous,
une petite colle du vendredi soir pour ne pas s'ennuyer ce week end :
le message d'erreur "espace insuffisant pour traiter cette commande"
J'ai une erreur assez difficile a reproduire (mais reproductible) que je ne comprends absolument pas:
alors j essaie de faire simple :
-je cree une form, avec un Tbitmap de 4000*4000 environs (ici ca passe sur mon pc, mais sur d autres ordis on a le message d erreur)
-je detruis la form
-je la recree et donc je recree le tbitmap, puis je le redimensionne width := 4000 et heigth := 4000 par exemple
eh bien c est en faisant le width ou le height (ca change de temps en temps) que ca explose...
Debut de reponse: (ben j ai cherche quand meme)
ce message est celui de l exception EoutOf Resources et l aide nous dit qu elle est levee quand il n'y a plus de handle windows a allouer... ca m aide pas bcp.
Merci a tous, parce que j' ai vraiment besoin d aide sur ce coup la...
je vais essayer de reproduire ca sur un code simple pour pouvoir le poster.
DeltaFX
Messages postés449Date d'inscriptionlundi 19 avril 2004StatutMembreDernière intervention 8 avril 20092 20 févr. 2006 à 16:00
Effectivement le doublebuffered ne sert a rien pour un bmp non affiché.
Donc t'es entrain de me dire que cette superimage n'est jamais affichée ? C'est quoi, de la photogrammétrie (par réseau neural ), du SIG, de l'extraction de primitive,de la photocomposition, tu te sers du bestiau comme HeighField pour un générateur de paysage 3D.... ????
Tu le geres en 24bit, en 32bit ? (c'est batard le 24bit, ca fait 3octets, berk....)
force le en pf32bit.
A priori, si t'as pas besoin d'afficher l'image, alors le format bitmap en interne n'est pas le plus approprié pour travailler dessus.
Avis au pros du delphi, mais je verrai bien un truc du genre
1- je charge mon bitmap depuis son fichier
2- je recopie dans byte array 4000*(4000*3 ou 4 selon pf24bit ou pf32bit) (ou tout autre structure appropriée pour stocker ce genre d'info) le bitmap à coup de scanline
3- je purge le bitmap (myBmp.free)
4 to N : je bricole ma pseudo image, comme un byte array
N+1 et si il faut un bitmap en sortie, ben on le recrée à l'inverse du 2.
flor003
Messages postés118Date d'inscriptiondimanche 28 septembre 2003StatutMembreDernière intervention19 juin 2007 17 févr. 2006 à 16:51
salut !
Moi je dis respect, ce genre d'erreur ça mérite le respect.
Utilises tu les stream? Tu recrée ton form mais as tu pensé à libérer
la mémoire de ton bitmap? la procedure pour les Tbitmap pour libérer la mémoire est
freeImage.
monbitmap.freeImage;
ni69
Messages postés1418Date d'inscriptionsamedi 12 juin 2004StatutMembreDernière intervention 5 juillet 201012 18 févr. 2006 à 12:12
Essaye d'arranger le problème en augmentant la mémoire maximale pouvant être allouée au programme dans les options du projet : onglet "Lieur" / "Taille de la mémoire" (pile maximum)
Il faut bien évidement également penser à libérer les ressources quand elles ne sont plus nécessaires !
@+
Nico { http://www.ni69.new.fr/ }
N'oubliez pas de cliquer sur Réponse Acceptée lorsque la réponse vous convient !
poirelotto
Messages postés3Date d'inscriptionvendredi 13 juin 2003StatutMembreDernière intervention20 février 2006 20 févr. 2006 à 00:30
flor, merci du conseil, je fais pas un freeimage explicite mais bien un Free dans le formdestroy..
cirec, oui j ai besoin de cette taille, et comme dit deltaFX, c pas la mort. Donc, oui, ca m'etonne que la memoire soit insuffisante pour stocle 48Mo sur un ordi avec 1Go+ de RAM
DeltaFX, merci pour le soutient, et les Free sont là...
TomoNico, seule solution que j ai pas essaye encore, je posterai si ca marche ...
merci a tous pour toutes les idees en tout cas.
y en a une aue j ai essaye avec une tres tres legere amelioration en terme de RAM (ce qui ne resoud rien a mon probleme) c'est la methode Dormant de Tbitmap... enfin...
DeltaFX
Messages postés449Date d'inscriptionlundi 19 avril 2004StatutMembreDernière intervention 8 avril 20092 20 févr. 2006 à 10:26
Mais quel usage stu d'un tel bitmap? Il est chargé en image de fond ?? Paske 4000*4000 c'est de toute façon hors ecran ( amoins de jouer avec 4 ATI XT1900 en crossfire, et encore)
Si c'est pour faire un appli de retouche d'image, y a comme astuce de restreindre le bitmap a ce que tu peux voir à l'ecran, pour les opération d'affichage, mais appliquer les traitements a toute l'image (donc en fait on voit jamais le gros bitmap, mais une copie retaillée / resizée qui tient dans l'ecran, et à chaque opération sur le gros bmp, tu remets a jour l'image visible, a coup de scanline & bitblt truc-machin).
poirelotto
Messages postés3Date d'inscriptionvendredi 13 juin 2003StatutMembreDernière intervention20 février 2006 20 févr. 2006 à 14:46
>cirec
j ai fait les deux. ca change rien vu que je flush les msgs avant de recreer une autre form. donc je passe dans le form destroy de suite.
>deltaFX
ah ! un tel bimap! effectivement, les dimensions de cette image ne correspondent pas a lecran :p et ne sert donc pas a etre affiche en tant que "gros bitmap". A vrai dire, mon affichage est grosso-modo ce que tu decris. eh oui je ne fais pas un Paint version X, ni un PacMan.. Pour la curiosite, disons qu il s agit plutot de donnees dont la convertion en couleur est tres lente (tres calculatoire) et donc ne doit etre faite qu une seule fois.
Encore une fois, 4000*4000 c vraiment pas la mort quand on a 1Go de RAM.
Quand au DoubleBuffered, j ai essaye avec et sans. Et je pense bien que ca ne change pas grand chose sur un bitmap qui n est pas affiche. Si?
apparemment, ca va un peu mieux depuis que j ai mis tous les free dans le destroy et que je force a passer immediatement dans le destroy :
{
maform.release;
appli.processmsgs; //flush => destroy effectif
maform := tbmp.create;
}
Maintenant, ca ne me parait pas tres optimise comme solution :=S