Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3374 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2  3  4
Page Suivante
Auteur Sujet :

[affichage 2D] recherche solution... pb de couleurs.... (ça marche !)

n°145346
HelloWorld
Salut tout le monde!
Posté le 27-05-2002 à 12:05:20  profilanswer
 

Reprise du message précédent :

Citation :

ah oui, ça pourrait être pas mal en effet ! pour faire ce qu'on disait au début : afficher 3 colonnes en même temps par exemple pour augmenter les performances :)  :hello:


 
Eh bien y'a qu'à tester !
Met ça dans ton create :
GdiSetBatchLimit( ... );
où ... c'est le nombre max de SetPixelV à accumuler (Heigth * Nb_Col_Dun_Coup = 200 * 3 = 600 par exemple)...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
mood
Publicité
Posté le 27-05-2002 à 12:05:20  profilanswer
 

n°145350
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 27-05-2002 à 12:09:08  profilanswer
 

HelloWorld a écrit a écrit :

Ouh la l'ami, pas trop vite ... :)
ChangeDisplaySettings ca change les settings de ton écran : genre la résolution ... rien à voir avec les DC.
 

Code :
  1. hBitmapDC := CreateCompatibleDC(Canvas.Handle);


 
Y'a pas à chercher, l'erreur est là ...
Peut être que c'est pas le canvas qu'il faut lui filer, mais ton composant.Handle plutôt ...
ou alors peut etre que ton canvas est monochrome à ce stade et qu'il est associé plus tard à ton composant et devient alors polychrome ...
Peut être que juste avant tu peux modifier le nombre de couleurs de ton canvas ...  




 
 
ouai, c'est ce que j'ai regardé... est je n'ai pas trouvé de propriétés pour changer ça... de plus, j'ai essayé avec :
 

Code :
  1. procedure TSpectrumControl.CreateWnd;
  2. var
  3.    truc : HWND;
  4. begin
  5.    inherited;
  6.    truc := self.Handle;
  7.    hBitmapDC := CreateCompatibleDC(GetDeviceContext(truc));
  8.    hBitmap := CreateCompatibleBitmap(hBitmapDC, Width, Height);
  9. SelectObject(hBitmapDC, hBitmap);
  10. end;


 
(je passe par la variable truc car la propriété Handle du composant est en lecture seule)
 
 
et le résultat est le même...  
maintenant, si dans ma fonction de remplissage, je mêt :

Code :
  1. hBitmap := CreateCompatibleBitmap(hBitmapDC, Width, Height);
  2.    FillRect(hBitmapDC, canvas.ClipRect, GetStockObject(LTGRAY_BRUSH));
  3.    Repaint;


 
le composant est effectivement remplit avec LTGRAY_BRUSH (qui est d'ailleurs tout à fait vilain).
 
ainsi, je pense que je me plante au niveau des couleurs...
 
je te montre ce que je fé :
 

Code :
  1. procedure TSpectrumControl.blitColumn(col: integer);
  2. var
  3.    i: integer;
  4.    couleur: COLORREF;
  5.    rec : TRect;
  6. begin
  7.    couleur := RGB(125,122,123);
  8.    for i := 0 to Height do begin
  9.       if (setPixel(hBitmapDC, Col, i, couleur) = -1) then begin
  10.          MessageBox(Handle, 'Error@blitColumn@TSpectrumControl :  could not paint on DC ','error', MB_OK);
  11.          Exit;
  12.       end;
  13.    end;
  14.    rec := Rect(Col, 0, Col+1, Height);
  15.    InvalidateRect(self.Handle, @rec, false);
  16.    BitBlt(Canvas.Handle, Col, 0, 1, Height, hBitmapDC, Col, 0, SRCCOPY);
  17. end;


 
voilà, ça ne va pas ça...


---------------
Boolay for ever...
n°145351
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 27-05-2002 à 12:10:33  profilanswer
 

HelloWorld a écrit a écrit :

Citation :

ah oui, ça pourrait être pas mal en effet ! pour faire ce qu'on disait au début : afficher 3 colonnes en même temps par exemple pour augmenter les performances :)  :hello:


 
Eh bien y'a qu'à tester !
Met ça dans ton create :
GdiSetBatchLimit( ... );
où ... c'est le nombre max de SetPixelV à accumuler (Heigth * Nb_Col_Dun_Coup = 200 * 3 = 600 par exemple)...  




 
 
ouai, je v essayer ;)


---------------
Boolay for ever...
n°145354
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 27-05-2002 à 12:13:22  profilanswer
 

Je décréte Moustaaki vainqueur de la cup BOULET OF THE YEAR !!! ou comment arriver à la 4ème page.... sans que ça marche :|


---------------
Boolay for ever...
n°145363
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 27-05-2002 à 12:25:37  profilanswer
 

Moustaaki a écrit a écrit :

Je décréte Moustaaki vainqueur de la cup BOULET OF THE YEAR !!! ou comment arriver à la 4ème page.... sans que ça marche :|  




 
 
heu, d'ailleurs, je suis vraiment un gros boulet, il faut mettre les couleurs en Hexa dans la marcro RGB..... ;) n'est ce pas ?


---------------
Boolay for ever...
n°145374
HelloWorld
Salut tout le monde!
Posté le 27-05-2002 à 12:34:47  profilanswer
 

Citation :

heu, d'ailleurs, je suis vraiment un gros boulet, il faut mettre les couleurs en Hexa dans la marcro RGB.....   n'est ce pas ?


 
Ben en Delphi je sais pas comment ça se passe, mais en C :
RGB(255, 255, 255) = RGB(0xFF, 0xFF, 0xFF) ...
 
Peut etre que ton RGB est fouareux ... pour etre sûr, remplace setPixel(hBitmapDC, Col, i, couleur) par setPixel(hBitmapDC, Col, i, 986895);


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°145385
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 27-05-2002 à 12:42:40  profilanswer
 

HelloWorld a écrit a écrit :

Citation :

heu, d'ailleurs, je suis vraiment un gros boulet, il faut mettre les couleurs en Hexa dans la marcro RGB.....   n'est ce pas ?


 
Ben en Delphi je sais pas comment ça se passe, mais en C :
RGB(255, 255, 255) = RGB(0xFF, 0xFF, 0xFF) ...
 
Peut etre que ton RGB est fouareux ... pour etre sûr, remplace setPixel(hBitmapDC, Col, i, couleur) par setPixel(hBitmapDC, Col, i, 986895);  




 
 
ça m'affiche du noir.
 
sinon, si j'ai bien compris, les valeurs hexa en delphi s'écrivent avec un $ devant... mais si je fait RGB($0xFF, ...), il me renvoie l'erreur : pas assez de paramètres originaux....
 
de plus, TColor encapsule COLORREF apparement donc clRed qui est une constante de TColor devrait bel et bien permettre d'afficher du rouge avec SetPixel.... :(
 
j'ai l'impression que ça vient du DC, là... chier...


---------------
Boolay for ever...
n°145388
HelloWorld
Salut tout le monde!
Posté le 27-05-2002 à 12:44:43  profilanswer
 

Que te renvoit GetDeviceCaps(hBitmapDC, BITSPIXEL); ?
 
test avec tous les DC (hBitmap + canvas)

 

[jfdsdjhfuetppo]--Message édité par HelloWorld le 27-05-2002 à 12:45:17--[/jfdsdjhfuetppo]


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°145393
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 27-05-2002 à 12:49:11  profilanswer
 

HelloWorld a écrit a écrit :

Que te renvoit GetDeviceCaps(hBitmapDC, BITSPIXEL); ?
 
test avec tous les DC (hBitmap + canvas)  
 
 




 
 
GetDeviceCaps(hBitmapDC, BITSPIXEL);
renvoie 32;
 
 
GetDeviceCaps(CAnvas.Handle, BITSPIXEL);
renvoie 32 aussi....
c'est donc pas monochrome !


---------------
Boolay for ever...
n°145406
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 27-05-2002 à 12:58:59  profilanswer
 

:heink:  
 

Code :
  1. if (setPixelV(hBitmapDC, Col, i, $c4d900) = false) then begin
  2.          FormatMessage(
  3.                FORMAT_MESSAGE_ALLOCATE_BUFFER or
  4.                FORMAT_MESSAGE_FROM_SYSTEM or
  5.                FORMAT_MESSAGE_IGNORE_INSERTS,
  6.                Nil,
  7.                GetLastError(),
  8.                0, //MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
  9.                @lpMsgBuf,
  10.                0,
  11.                Nil
  12.          );
  13.          MessageBox( Handle, lpMsgBuf, 'Error', MB_OK or MB_ICONINFORMATION );


 
 
 
 
le message affiché est :
"Le type de ressource spécifié ne peut être trouvé dans le fichier image"
 
 
 
bon, bin, je ne vois pas le rapport  [:toyonos]


---------------
Boolay for ever...
mood
Publicité
Posté le 27-05-2002 à 12:58:59  profilanswer
 

n°145416
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 27-05-2002 à 13:08:51  profilanswer
 

c'est bysarre....
 
GetDeviceCaps(hBitmapDC, RC_BITBLT) -> renvoie 0
 
 
 
 
et c'est dommage parceque :

Citation :


SetPixelV is faster than SetPixel because it does not need to return the color value of the point actually painted.  


 
 
 
 
 
heu... je peux taper mon ordi ?  [:tapai]

 

[jfdsdjhfuetppo]--Message édité par Moustaaki le 27-05-2002 à 13:20:25--[/jfdsdjhfuetppo]


---------------
Boolay for ever...
n°145438
HelloWorld
Salut tout le monde!
Posté le 27-05-2002 à 13:56:13  profilanswer
 

Citation :

for i := 0 to Height do begin


 

Citation :

for i := 0 to Height - 1 do begin


 
Ca doit venir de là.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°145443
HelloWorld
Salut tout le monde!
Posté le 27-05-2002 à 14:03:08  profilanswer
 

GetDeviceCaps(..., NUMCOLORS); ...
Tu bosses bien en 32 bits sous ton Windows ?

 

[jfdsdjhfuetppo]--Message édité par HelloWorld le 27-05-2002 à 14:06:26--[/jfdsdjhfuetppo]


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°145490
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 27-05-2002 à 14:55:46  profilanswer
 

HelloWorld a écrit a écrit :

GetDeviceCaps(..., NUMCOLORS); ...
Tu bosses bien en 32 bits sous ton Windows ?  
 
 




 
 
ouai ouai, je bosse en 32 bits.


---------------
Boolay for ever...
n°145492
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 27-05-2002 à 14:57:09  profilanswer
 

HelloWorld a écrit a écrit :

Citation :

for i := 0 to Height do begin


 

Citation :

for i := 0 to Height - 1 do begin


 
Ca doit venir de là.  




 
 
 
 
oui oui, je suis un gros boulet....  [:tapai]


---------------
Boolay for ever...
n°145495
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 27-05-2002 à 15:00:43  profilanswer
 

HelloWorld a écrit a écrit :

GetDeviceCaps(..., NUMCOLORS); ...
Tu bosses bien en 32 bits sous ton Windows ?  
 
 




 
 
GetDeviceCaps(hBitmapDC, NUMCOLORS);
retourne -1
 
GetDeviceCaps(Canvas.Handle, NUMCOLORS);
retourne -1
 
 
 
 
donc, plus de 8bpp, n'est-ce pas ?

 

[jfdsdjhfuetppo]--Message édité par Moustaaki le 27-05-2002 à 15:02:59--[/jfdsdjhfuetppo]


---------------
Boolay for ever...
n°145510
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 27-05-2002 à 15:22:49  profilanswer
 

j'ai testé le truc avec le batch et je ne vois pas la différence !
j'ai essayé avec des nombres plus grands : 18000 et queud... c pareil... cela dit, c'est suffisement rapide... bien que j'ai un peu peur au niveau de la dépendance CPU : il est utilisé à 100%, là... et quand yaura le traitement de l'usb et des données derrière... ça risque d'être cho...


---------------
Boolay for ever...
n°145537
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 27-05-2002 à 15:56:36  profilanswer
 

[:kopikol] pfffff....
 

Citation :


function ColorToRGB(Color: TColor): Longint;
 
Description
 
Appelez ColorToRGB pour obtenir une représentation RGB d'une couleur, utilisable avec l'API Windows. ColorToRGB supprime les informations stockées dans les bits de poids le plus fort sur la palette de couleurs non utilisables.


 
 
or si je fais ça :

Code :
  1. setPixelV(hBitmapDC, Col, i, ColorToRGB(clRed)


 
il m'affiche du noir le petit salop alors que clRed, comme son nom l'indique, bin c'est du rouge !   [:tomawack]
 
 
...  [:vomi]  (je digère mal ce que j'ai mangé à midi, dis donc..)


---------------
Boolay for ever...
n°145560
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 27-05-2002 à 16:31:55  profilanswer
 

quelqu'un a une idée pour mon problème de couleur?


---------------
Boolay for ever...
n°145693
HelloWorld
Salut tout le monde!
Posté le 27-05-2002 à 19:58:12  profilanswer
 

Là je sèche ...
C'est pas normal du tout ...
NUMCOLORS est bien égal à 4 milliards ...
Donc ton bitmap est en 32 bits c'est sûr.
Ca chie peut etre au niveau du blit ... le blit fait en conversion 32 bits => 1 bit avant d'afficher sur Canvas.Handle.
Tu peux blitter sur GetDeviceContext(self.Handle); pour voir ce que ça fait ... ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°145694
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 27-05-2002 à 20:01:26  profilanswer
 

HelloWorld a écrit a écrit :

Là je sèche ...
C'est pas normal du tout ...
NUMCOLORS est bien égal à 4 milliards ...
Donc ton bitmap est en 32 bits c'est sûr.
Ca chie peut etre au niveau du blit ... le blit fait en conversion 32 bits => 1 bit avant d'afficher sur Canvas.Handle.
Tu peux blitter sur GetDeviceContext(self.Handle); pour voir ce que ça fait ... ?  




 
 
ok, j'essayerais ça demain !

n°145886
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 28-05-2002 à 09:49:12  profilanswer
 

HelloWorld a écrit a écrit :

Là je sèche ...
C'est pas normal du tout ...
NUMCOLORS est bien égal à 4 milliards ...
Donc ton bitmap est en 32 bits c'est sûr.
Ca chie peut etre au niveau du blit ... le blit fait en conversion 32 bits => 1 bit avant d'afficher sur Canvas.Handle.
Tu peux blitter sur GetDeviceContext(self.Handle); pour voir ce que ça fait ... ?  




 
 
ça ne change rien à part que c'est 10 fois plus lent.
c'est lourd ! tout est en 32 bits... et là, il ne m'affiche que du 1bit... c'est carrément rageant;..  [:zobbi]

 

[jfdsdjhfuetppo]--Message édité par Moustaaki le 28-05-2002 à 09:50:18--[/jfdsdjhfuetppo]


---------------
Boolay for ever...
n°145932
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 28-05-2002 à 10:42:22  profilanswer
 

:pt1cable:  
 

Citation :


Note: When a memory device context is created, it initially has a 1-by-1 monochrome bitmap selected into it. If this memory device context is used in CreateCompatibleBitmap, the bitmap that is created is a monochrome bitmap. To create a color bitmap, use the hDC that was used to create the memory device context, as shown in the following code:
 
    HDC memDC = CreateCompatibleDC ( hDC );
    HBITMAP memBM = CreateCompatibleBitmap ( hDC );
    SelectObject ( memDC, memBM );


 
 
c'est p'têtre ça le problème, non ????!!
bon, je v tout de suite essayer, je vous tiens au courant


---------------
Boolay for ever...
n°145947
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 28-05-2002 à 10:55:34  profilanswer
 

c'est cool, ça marche !!! :jap:
 
 
je vous mettrais le code du composant lorsqu'il sera vraiment utilisable.
 
MERCI !!!!! :jap:
 
spécialement à helloworld qui a été extrément patient !

 

[jfdsdjhfuetppo]--Message édité par Moustaaki le 28-05-2002 à 10:56:29--[/jfdsdjhfuetppo]


---------------
Boolay for ever...
n°146083
HelloWorld
Salut tout le monde!
Posté le 28-05-2002 à 13:18:42  profilanswer
 

Citation :

HDC memDC = CreateCompatibleDC ( hDC );
   HBITMAP memBM = CreateCompatibleBitmap ( hDC );
   SelectObject ( memDC, memBM );


 
Ben il me semble que c'est exactement ce qu'on avait fait ...
 

Code :
  1. hBitmapDC := CreateCompatibleDC(GetDeviceContext(truc));
  2. hBitmap := CreateCompatibleBitmap(hBitmapDC, Width, Height);
  3. SelectObject(hBitmapDC, hBitmap);


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°146086
youdontcar​e
Posté le 28-05-2002 à 13:23:01  profilanswer
 

non, l'appel à CreateCompatibleBitmap n'utilisait pas le dc du canvas.

n°146194
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 28-05-2002 à 15:17:16  profilanswer
 

youdontcare a écrit a écrit :

non, l'appel à CreateCompatibleBitmap n'utilisait pas le dc du canvas.  




 
exactement :)
chui tombé sur cette remarque de la doc par hazard en cherchant je ne sais plus quelle fonction ! ouf !


---------------
Boolay for ever...
n°146265
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 28-05-2002 à 16:22:44  profilanswer
 

bon, mon composant devenant un peu trop spécialisé ... je v vous donner le code maintenant avant qu'il y est trop de trucs dispensables :
 
 
le composant écrit est un composant héritant de TWinControl.
 
 
 
 

Code :
  1. interface
  2. uses
  3.    Controls, Windows, Classes, Graphics;
  4. const
  5. type
  6. TSpectrumControl = class (TCustomControl)
  7.    private
  8.       hBitmap: HWnd;
  9.       hBitmapDC: HDC; // Device context compatible pour le bitmap.
  10.       nbColWaiting: integer; // nombre de colonne en attente d'affichage.
  11.       curXCol: integer; // coordonnées x de la colonne en cours.
  12.       dispFreq: integer; // frequence d'affichage (nombre de colonnes à afficher à chaque blit sur la fenêtre)
  13.    protected
  14.       procedure PaintWindow(DC: HDC); override;
  15.    public
  16.       procedure CreateWnd; override;
  17.       procedure DestroyWnd; override;
  18.       procedure blitColumn(couleur: TColor); overload;
  19.       procedure reset;    // réinitialise l'affichage (ne réalloue pas les ressources).
  20.       procedure setDisplayFrequency(freq: integer);
  21. end;
  22. implementation
  23. uses Types;
  24. {
  25.    Réservation des ressources (device context et bitmap mémoire)
  26. }
  27. procedure TSpectrumControl.CreateWnd;
  28. begin
  29.    inherited;
  30.    self.FDoubleBuffered := true;
  31.    hBitmapDC := CreateCompatibleDC(Canvas.Handle);
  32.    hBitmap := CreateCompatibleBitmap(Canvas.Handle, Width, Height);
  33. SelectObject(hBitmapDC, hBitmap);
  34.    nbColWaiting := 0;
  35.    curXCol := 0;
  36.    dispFreq := 1;
  37. end;
  38. {
  39.    libération des ressources mémoires.
  40. }
  41. procedure TSpectrumControl.DestroyWnd;
  42. begin
  43.    inherited;
  44.    DeleteObject(hBitmap);
  45. DeleteDC(hBitmapDC);
  46. end;
  47. {
  48.    permet de modifier la frequence de raffraichissement de l'affichage.
  49.    si freq = 1, les colonnes seront affichées une à une;
  50.    si freq = 2, deux par deux, etc.
  51. }
  52. procedure TSpectrumControl.setDisplayFrequency(freq: integer);
  53. begin
  54.     dispFreq := freq; // frequence d'affichage.
  55.     nbColWaiting := 0;
  56. end;
  57. {
  58.    blit une colonne formée par des pixels de couleurs données par le param couleur.
  59. }
  60. procedure TSpectrumControl.blitColumn(couleur: TColor);
  61. var
  62.    i: integer;
  63.    lpMsgBuf: LPTSTR;
  64. begin
  65.    for i := 0 to Height - 1 do begin
  66.       if (setPixelV(hBitmapDC, curXCol, i, ColorToRGB(couleur)) = false) then begin
  67.          FormatMessage(
  68.                FORMAT_MESSAGE_ALLOCATE_BUFFER or
  69.                FORMAT_MESSAGE_FROM_SYSTEM or
  70.                FORMAT_MESSAGE_IGNORE_INSERTS,
  71.                Nil,
  72.                GetLastError(),
  73.                0,
  74.                @lpMsgBuf,
  75.                0,
  76.                Nil
  77.          );
  78.          MessageBox( Handle, lpMsgBuf, 'Erreur', MB_OK or MB_ICONERROR);
  79.          Exit;
  80.       end;
  81.    end;
  82.    nbColWaiting := nbColWaiting + 1;
  83.    // si on a calculé un nombre suffisant de colonnes, on affiche l'ensemble des
  84.    // colonnes en attentes;
  85.    if (nbColWaiting = dispFreq) then begin
  86.       BitBlt(Canvas.Handle, curXCol - dispFreq + 1, 0, dispFreq, Height, hBitmapDC, curXCol - dispFreq + 1, 0, SRCCOPY);
  87.       nbColWaiting := 0;
  88.    end;
  89.    // si la colonne courante est la dernière colonne, on passe à la première
  90.    // sinon, on passe à la suivante.
  91.    if curXCol > Width - 2 then begin
  92.       // on affiche ce qui pourrait éventuellement être en attente :
  93.       BitBlt(Canvas.Handle, curXCol - nbColWaiting, 0, nbColWaiting, Height, hBitmapDC, curXCol - nbColWaiting, 0, SRCCOPY);
  94.       nbCOlWaiting := 0;
  95.       curXCol := 0;
  96.       reset;
  97.    end
  98.    else
  99.       curXCol := curXCol + 1;
  100. end;
  101. procedure TSpectrumControl.PaintWindow(DC: HDC);
  102. begin
  103.    inherited;
  104. BitBlt(DC, 0, 0, Width, Height, hBitmapDC, 0, 0, SRCCOPY);
  105. end;
  106. procedure TSpectrumControl.reset;
  107. begin
  108.    FillRect(hBitmapDC, canvas.ClipRect, GetStockObject(BLACK_BRUSH));
  109.    Repaint;
  110. end;
  111. end.


 
 
 
voilà ! en ésperant que ça puisse servir à kelkun !!!!
 
 
à plus et encore merci !
 
tiens, aussi, j'ai fait un test comparant la méthode VCL et la méthode GDI...  
le résultat : pour afficher 540 colonnes sur un P2 333 128Mo de RAM, il faut 510ms avec l'algo utilisé ci-dessus contre 13000ms avec un algo de même type mais en utilisant un TPaintBox, un bitmap de 1*200 utilisé comme buffer.
 
j'peux vous mettre le code de ce truc aussi ou vous mettre l'exe du test sur mon ftp...


---------------
Boolay for ever...
n°146283
HelloWorld
Salut tout le monde!
Posté le 28-05-2002 à 16:41:09  profilanswer
 

Citation :

non, l'appel à CreateCompatibleBitmap n'utilisait pas le dc du canvas.


 
Moi je pleure sur des erreurs comme ça. J'ai installé Delphi 5 et testé ... et j'ai rien vu !
Ca me rassure ... je comprenais vraiment pas.
 

Citation :

tiens, aussi, j'ai fait un test comparant la méthode VCL et la méthode GDI...  
le résultat : pour afficher 540 colonnes sur un P2 333 128Mo de RAM, il faut 510ms avec l'algo utilisé ci-dessus contre 13000ms avec un algo de même type mais en utilisant un TPaintBox, un bitmap de 1*200 utilisé comme buffer.


 
Moi aussi j'ai tester ceci :

Code :
  1. Image est un TImage
  2.   for i:=0 to Image.Width - 1 do begin
  3.        for j:= 0 to image.height -1 do begin
  4.            Image.Canvas.Pixels[i, j] := RGB(255, 0, 0);
  5.        end;
  6.        image.Refresh;
  7.    end;


 
environ 740 ms contre 210 pour l'autre code. 3.5 fois plus rapide.
Et encore, ca c'est le plus lent qu'on puisse faire en Win32 ...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°146288
antp
Super Administrateur
Champion des excuses bidons
Posté le 28-05-2002 à 16:43:57  profilanswer
 

j'ai plus trop suivi là, ça a peut-être été dit, Canvas.Pixels[...] -> C'est mega lent ça :)
Y a ScanLine pour la vitesse, mais bon si c'est pour des colonnes ça aidera pas :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°146299
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 28-05-2002 à 17:01:36  profilanswer
 

antp a écrit a écrit :

j'ai plus trop suivi là, ça a peut-être été dit, Canvas.Pixels[...] -> C'est mega lent ça :)
Y a ScanLine pour la vitesse, mais bon si c'est pour des colonnes ça aidera pas :D  




 
et C'EST pour des colonnes :D !! donc, pas trouvé mieux que canvas.pixel[x,y]:=couleur;
 
 
 :ange:


---------------
Boolay for ever...
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
moteur de rechercheCCS comment ca marche les classes ?
j ai fait un Moteur de recherche avec saisi semi auto...[PHP - setlocale en FR marche pas]
[VB] Toolbar IE (Je paie pour la solution!!!)Problèmes d'affichage avec les pseudo-frames
Tri d'un tableau selon plusieurs critères + affichage d'icone[JAVA] Repaint ne marche pas :(((( [Resolu]
[CSS]couleurs des liens...[BDD] Recherche cours sur les formes normales
Plus de sujets relatifs à : [affichage 2D] recherche solution... pb de couleurs.... (ça marche !)


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)