Einzelnen Beitrag anzeigen

FragenderHerbert

Registriert seit: 4. Dez 2013
47 Beiträge
 
#6

AW: Frage zur Unit_OpenPTC

  Alt 5. Nov 2014, 11:49
[quote=himitsu]Um das nochmal klarzustellen, damit ich das jetzt richtig verstehe: Du willst also unbedingt in einer Console Grafik ausgeben?

Nein, nicht auf einer Text-Console. Der Zeiger auf den Ausgabebildschirm heißt nur console, ist aber in Wirklichkeit ein Grafikbildschirm, der so weit alle gängigen Grafikmodi unterstützt.

Delphi-Quellcode:
//die folgende Anweisung erzeugt einen virtuellen Bildschirm
  _console := ptc_console_create();

//nun wird das Pixelformat eingestellt, also TrueColor (32 Bit/Pixel) und die Farbmaske für
//Blau, Grün und Rot
  _format := ptc_format_create_direct(32,$00FF0000,$0000FF00,$000000FF,0);

//Will ich diesen Grafikbildschirm im Vollbildmodus oder als Fenster? Hier als Fenster!
  ptc_console_option( _console, 'windowed output' );

  
//Jetzt wird die Grafikconsole mit dem eingestellten Pixelformat geöffnet
  ptc_console_open_format(_console,'Delphi example',_format,0);

//Nun wird ein Zeiger auf die echte (sichtbare) Bildschirmoberfläche erzeugt
    _surface := ptc_surface_create(ptc_console_width(_console),ptc_console_height(_console),_format);

//Wenn ich nun Zeichnen will, muss ich folgendes machen:
  _pixels := ptc_surface_lock(_surface); // just use normal pointer. dont use dynamic array or bug !

   // get surface dimensions (Ausdehnung des Grafikbildschirmes.
  _width := ptc_surface_width(_surface);
  _height := ptc_surface_height(_surface);
 
//Dann sollte ich zeichnen können. Im Testprogramm funktioniert das auch, aber nicht mit
//derobigen //Unit.

//So hier:
//Nur Beispiel wie ein Pixel ausgegeben wird.
  Longint(pointer(longint(_pixels) + x*4 + y*_width*4)^) := (r shl 16) + (g shl 8) + b;
  Longint(pointer(longint(_pixels) + x*4 + y*_width*4)^) := ColorValue as Longint
                                                    
//der Multiplikator 4, weil 4 Byte je Pixel

//Wenn alles gezeichnet ist, muss noch das hier gemacht werden

   
//Surface wieder frei geben
   ptc_surface_unlock(_surface);

// copy to console
   ptc_surface_copy(_surface,_console);

// update console, Jetzt ist das Pixel oder das Bild zu sehen.
   ptc_console_update(_console);

Mein Problem ist jetzt aber, das der Zeiger _pixels nicht korrekt zugewiesen wird. Eigenartiger Weise funktioniert aber mein Testprogramm, das ich als Anhang mal mit poste.

Zitat von himitsu:
Warum denn keine VCL, LCL, FMX, WinForms, DirectX und was es sonst noch alles für laaaaaaangjährig existierende grafische Ausgaben gibt?
Weil mich der Ehrgeiz gepackt hat, als ich das ptc Package im ../Source/Packages/ptc Ordner gefunden habe. Habe mit einem Computerfreund zusammen die Demos im Examples Ordner des Packages getestet und bin einigermaßen begeistert von der Ausgabegeschwindigkeit.

Zitat von Jens01:
Hast Du mal Graphics32 ausprobiert? Das funktioniert mit Lazarus, jedenfalls ist es bei Typhon schon lauffähig dabei. Da hast Du auch ein breiten Forum zum Fragen und auch einige Beispiele als Demos.
Nein, hab ich noch nicht. Muss mal schauen. Wenn das Supportforum wirklich auch Anfänger passend unterstützt, steig ich vielleicht um.
Angehängte Dateien
Dateityp: zip OpenPTCDelphi100.zip (12,8 KB, 0x aufgerufen)
  Mit Zitat antworten Zitat