Bonjour a tous,
j ai du apporter quelques modifications a graphics.pas pour resoudre des bugs gdi avec les tbitmap. bref.
je ne sais pas comment recompiler simplement l unite pour avoir un Graphics.dcu a jour.
merci mercii
Version imprimable
Bonjour a tous,
j ai du apporter quelques modifications a graphics.pas pour resoudre des bugs gdi avec les tbitmap. bref.
je ne sais pas comment recompiler simplement l unite pour avoir un Graphics.dcu a jour.
merci mercii
Essaie de reconstruire l'unité ...
je suis peut etre un peu a la masse, mais je sais construire un projet. pas une unite toute seule.
sinon je copie mon .pas dans un nouveau projet, je compile et puis je remet le dcu avec les dcu delphis, mais j aurais aime faire ca "proprement" pour une fois.
ah aussi, j aimerai pouvoir debugger, mettre des points d arret...
j ai trouve des corrections a faire sur le site de borland, mais j aimerais bien faire du pas a pas pour comprendre ce qui se passe exactement. cest impossible quand on utilise que le dcu...
une idee ?
bon c bien... j ai eu ma reponse, alors je la poste.
on sait jamais peut etre que qqn va se poser la meme question un jour...
il suffisait d ajouter $(DELPHI)\sources\vcl dans le chemin de bibliotheque des options d environnement.
bon ca ne cree pas les dcu au bon endroit, mais c mieux que rien.
ciaociao
Normalement, quand tu enregistre ton unité, une .dcu ( unité compilée ) est créé. Copie-le dans le répertoire où tu a trouver Graphics.pas, et les modifs que tu as apportés seront prises en compte ...
Edit: J'ai poster mon msg en même temps que Copeau ...
Salut.
Pourrais tu indiquer les bugs en question ?
Ca m'interesse vivement.
Merci.
A+
moi j ai un bug carrement violent, quand je fais un
le redimmensionnement explose avec une erreur genre 'not enough memory to perfomr this action' (pour xxxxxxx vaut une certaine valeur, variable selon les machines apparemment)Code:
1
2
3
4 mavar := TBitmap.create; mavar.width := xxxxxxx; mavar.height := xxxxxxxxx;
apres enquete, je me suis rendu compte que ce sont les gdi handles qui viennent a manquer.
j avais deja poste ce probleme il y a 2 mois
je ne sais pas quoi dire de plus..
tu trouveras peut etre ce que tu cherches avec ce lien
http://qc.borland.com/wc/qcmain.aspx...Bitmap&plat=10
bonne chance
Ce que j'ai constaté depuis longtemps, c'est que l'utilisation de très grands bitmap peut planter la machine (mémoire insuffisante... ou la mémoire de la carte graphique ???)
Je doute que cela soit du à un Bog de l'unité graphics. Ce que j'ai constaté aussi, c'est que cela dépend souvent de la machine.
Il y a aussi certaines APIs windows qui ne supporte pas les très grand bitmap ou les redimensionnements. StretchDBIBits en particulier.
Cela m'a conduit à faire des redimensionnements en deux fois pour éviter le plantage.
Peux tu m'expliquer d'avantage :
Merci.Citation:
apres enquete, je me suis rendu compte que ce sont les gdi handles qui viennent a manquer.
A+
eh bien, depuis le temps ce n est plus tres clair, mais bon voila :
l erreur "pas assez de memoire pour effectuer cette action" (texte approximatif) est levee quand une appli cherche a allouer de nouveaux handle et qu il n y a plus de hndl disponibles. Rien a voir avec la memoire.
Les bitmaps et leurs fonctions utilisent un certain nombre de handle. Avec les TBitmap, apparemment, dans certains cas, beaucoup plus que necessaire.
certaines fonctions, (Assign() et d autres) ne nettoient pas tout ca proprement.
ajouter FreeContext; dans cette methode assign resoud ce bug pour cette methode
j ai fait un test sur les tbitmap: une simple boucle for qui augmente la tailleCode:
1
2
3
4
5
6
7
8
9
10 procedure TBitmap.Assign(Source: TPersistent); var DIB: TDIBSection; begin if (Source = nil) or (Source is TBitmap) then begin FreeContext; // ADD THIS LINE EnterCriticalSection(BitmapImageLock); try ...
comme ca je plante pour i = 3557Code:
1
2
3
4
5 for i .... do bmp.width := i; bmp.hiehgt := i; end;
comme ca je plante pour i = 6107Code:
1
2
3
4
5
6 for i .... do bmp.assign(nil); bmp.width := i; bmp.hiehgt := i; end;
comme ca j ai [as assez de RAM pour le faire planter (plus de 8000pix ok)Code:
1
2
3
4
5
6 for i .... do bmp.pixelformat := pf24bit; bmp.width := i; bmp.hiehgt := i; end;
bon, c juste des infos....
y avait pas mal d info dans le lien qu j ai mis plus haut, dans les topics avec resource leak ou gdi leak
vala vala.
Merci pour le tuyaut. Je vais étudier la methode Assign.