[zindozs] en bas niveau, afficher des pixels dans une fenetre

en bas niveau, afficher des pixels dans une fenetre [zindozs] - Programmation

Marsh Posté le 24-08-2002 à 00:04:22    

voila, je cherche a afficher des pixels dasn une fenetre, mais a un bas niveau, afin de pouvoir m'amuser a écrire des algos pour tracer une ligne, etc....
 
bref, je souhaite pas utiliser opengl pour afficher des pixels, paske pour réécrire une fonction ligne, ce serait trop "lent" par rapport a la fonctrion ligne d'opengl....
 
 
si vosu voyez ce que je veux dire

Reply

Marsh Posté le 24-08-2002 à 00:04:22   

Reply

Marsh Posté le 24-08-2002 à 00:27:08    

Tu veux aller bas comment?
 


---------------
Informaticien.be - Lancez des défis à vos amis
Reply

Marsh Posté le 24-08-2002 à 00:32:23    

ce que je veux faire : dessiner une fenetre, y afficher des pixels.... et que quand je bouge la fenetre, les pixels bougent avec la fenetre.....
 
 
mais que la seule fonction qui m'intéresse, c'est pixe(x,y,R,G,B)
 
 
a la limite, la fenetre "gere" l'agrandissement et le "streching" pour la résolution, du genre ma fenetre elle a 320*240 pixels/points, quelle que soit sa taille réelle en pixels réels...
 
 
pour l'instant, c'est tout ce qui m'intéresse

Reply

Marsh Posté le 24-08-2002 à 00:37:19    

What about SetPixel()
 
Mais bon, comme tu précises pas le langage, c'est pas évident de te donner des infos, en delphi/builder, tu utilises un Bitmap et on en parle plus


---------------
Informaticien.be - Lancez des défis à vos amis
Reply

Marsh Posté le 24-08-2002 à 00:42:38    

c++builder...
 
 
le probleme, c'est que j'ai compilé l'éxemple de dessinateur de builder, et il y avait du clipping lors du tracé de cercles, un peu comme lorque j'ai essayé de faire mon parser c++avec un richedit... j'utilisais un composant de trop haut niveau, et j'ai peur que le TCanvas de builder pour les pixels soit bcp moisn rapide que la fonction api window$

Reply

Marsh Posté le 24-08-2002 à 00:44:34    

Benh non, ca utilise l'API, rien de plus.
 
Va voir les sources des compos, c'est instructif ;-)
 

Code :
  1. procedure TCanvas.SetPixel(X, Y: Integer; Value: TColor);
  2. begin
  3.   Changing;
  4.   RequiredState([csHandleValid, csPenValid]);
  5.   Windows.SetPixel(FHandle, X, Y, ColorToRGB(Value));
  6.   Changed;
  7. end;


---------------
Informaticien.be - Lancez des défis à vos amis
Reply

Marsh Posté le 24-08-2002 à 01:19:11    

clock_t truc = clock();
for (int i = 0 ; i <Image->Width ; i++ )
       for (int j = 0; j <Image->Height ; j++)
                Image->Canvas->Pixels[i][j]=clWhite;
clock_t truc2 = clock() - truc;
 
float trucd = truc2/CLK_TCK ;
 
 
719 millisecondes, c'est trp lent !

Reply

Marsh Posté le 24-08-2002 à 01:24:49    

C'est malin, mais c'est pas Borland qui est en cause, c'est l'API et c'est bien normal dans ce cas-ci.
 
Utilise le ScanLine, tu auras un pointeur sur un tableau de pixels.
 
Fais une recherche, je suis sur qu'il y a un topic la dessus  ;)


---------------
Informaticien.be - Lancez des défis à vos amis
Reply

Marsh Posté le 24-08-2002 à 07:53:59    

c'est vrai quand passant par scanline tu vas doper ton accès aux pixels car setpixel c'est lent (en utilisant directemet l'api c vrai aussi que c un poil plus rapide car tu évites les controles de sécurité de la vcl)  
 
tu peux aussi essayer la librairie graphics32
 

Citation :

Graphics32 is a set of functions, classes, components and controls designed for high-performance graphics programming.
 
Being highly specialized for 32-bit pixel format, it provides fast operations with pixels and graphic primitives and in most cases Graphics32 considerably outperforms standard TBitmap/TCanvas classes.
 
The library comes with a full source code, documentation and examples.


Message édité par taureau le 24-08-2002 à 07:56:21
Reply

Marsh Posté le 24-08-2002 à 09:43:29    

mon idée, c'est pas de réécrire opengl, mais de réécrire , pour le début, les fonctions bas niveau de lignes, polygones, etc.....

Reply

Marsh Posté le 24-08-2002 à 09:43:29   

Reply

Marsh Posté le 24-08-2002 à 09:47:17    

tu regardes CreateDIBSection(), ça te donnera un 'écran virtuel' dans lequel tu pourras faire ta cuisine. tu l'affiches ensuite avec BitBlt().
 
dans la msdn, il y a un exemple 'fire' qui fait tout ça.

Reply

Marsh Posté le 24-08-2002 à 10:14:12    

comme d'hab l'installation des packages chie....
et la dans la msdn je trouve rien de clair, c'est le bordel...


Message édité par farib le 24-08-2002 à 10:18:13
Reply

Marsh Posté le 24-08-2002 à 10:50:47    

oué, fo télécharger les 130 mo déexemples.... cool
 
 
 
c'est plus lent avec scanline !!!!!

Code :
  1. {
  2. Graphics::TBitmap * WorkImage = new Graphics::TBitmap();
  3. WorkImage->Width = 640 ;
  4. WorkImage->Height = 480 ;
  5. for (int j = 0 ; j < WorkImage->Height ; j++ )
  6. {
  7.        Byte * Ligne = (Byte *)WorkImage->ScanLine[j];
  8.        for (int i = 0 ; i < WorkImage->Width; i++ )
  9.                 Ligne[i]=(Byte)0;
  10. }
  11. Image->Canvas->Draw(0,0,WorkImage);
  12. }


Message édité par farib le 24-08-2002 à 10:52:48
Reply

Marsh Posté le 24-08-2002 à 11:28:17    

Reply

Marsh Posté le 24-08-2002 à 11:39:07    

Reply

Marsh Posté le 24-08-2002 à 12:25:50    

ma question : les gars qui ont programmé opengl, quelle(s) routine(s) appellent-il pour allumer des pixels ?

Reply

Marsh Posté le 24-08-2002 à 14:27:33    

ma réponse : j'en sais rien mais y a pas de routine miraculeuse tu dois passer par les dib et en suivant les différents liens donnés tu auras des sources pour te montrer des routines optimisées a cet effet
 
tiens cadeau http://www.droopyeyes.com/default. [...] oduct&ID=3
 
c pour delphi mais ce doit etre facilement adaptable


Message édité par taureau le 24-08-2002 à 14:37:13
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed