Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Sa Jul 05, 2025 04:45

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 28, 2003 22:45 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Feb 24, 2003 18:19
Beiträge: 165
Wohnort: Cologne
moin,

ich möchte mittels der normalen WinAPI (und ein wenig vcl erstmal) ein wenig schneller zeichnen als es die "normale" canvas-funktion zulässt - vor allem einzelne Pixel lesen/setzen ist da ja nicht gerade förderlich... Nun gut, denkt sich der liebe red, sollte ja kein problem sein wenn wir uns einen array mit der größe der gewünschten fläche anlegen und dort hinein malen, und das erst ausgeben - das klappt soweit auch ganz gut, jedoch fehlt mir die möglichkeit, Text auszugeben... hat da jemand eine schlaue idee für mich :) ? Ach ja, hier noch der Basis-Quelltext, damit nicht alle im dunkeln stehn :D die momentane größe beträgt 320x200, in RGB

Code:
  1.  
  2.  
  3. // Typen und Variabeln definieren
  4. type
  5.   xMyCol = Record blue, green, red: Byte; end;
  6.   xPreBuffer = Array[0..63999] of xMyCol;
  7. var
  8.   calcTable: Array[0..199] of Integer;
  9.   PreBuffer: xPreBuffer;
  10.   BitmapInfo: pBitmapInfo;
  11.   fTarget: tCanvas;
  12.  
  13. // später im source
  14.  
  15. procedure InitGraph(target: tCanvas);
  16. var i: Integer;
  17. begin
  18.   if Init then Exit;
  19.   fTarget:=target;
  20.   for i:=0 to 199 do calcTable[i]:=(199-i)*320;  // y ist invertiert!
  21.   GetMem(bitmapInfo, SizeOf(TBitmapInfoHeader));
  22.   with BitmapInfo^.bmIHeader do
  23.   begin
  24.     biSize := 40;
  25.     biWidth := 320;
  26.     biHeight := 200;
  27.     biPlanes := 1;
  28.     biBitCount := SizeOf(xMyCol)*8;
  29.     biCompression := 0;
  30.     biSizeImage := 0;
  31.     biXPelsPerMeter := 0;
  32.     biYPelsPerMeter := 0;
  33.     biClrUsed := 0;
  34.     biClrImportant := 0;
  35.   end;
  36.   Init:=True;
  37. end;
  38.  
  39. procedure PutPixel(x,y: Integer; Col: xMyCol);
  40. begin
  41.   move(col, preBuffer[calcTable[y]+x],3);
  42. end;
  43.  
  44.  
  45. function GetPixel(x,y: Integer): xMyCol;
  46. begin
  47.   move(preBuffer[calctable[y]+x], result, 3);
  48. end;
  49.  
  50. // ein paar weitere prozeduren später...
  51.  
  52. procedure UpdateScreen;
  53. var temp: tBitmap;
  54. begin
  55.   if not Init then Exit;
  56.   temp:=tBitmap.Create;
  57.   temp.Width:=320; temp.height:=200;
  58.   SetDIBitsToDevice(temp.canvas.handle, 0, 0, 320, 200, 0, 0, 0, 200, @PreBuffer, BitmapInfo^, DIB_RGB_COLORS);
  59.   fTarget.Draw(0,0,temp);
  60.   temp.free;
  61. end;
  62.  
  63. procedure FreeGraph;
  64. begin
  65.   FreeMem(bitmapInfo);
  66.   Init:=False;
  67. end;
  68.  
  69.  


also, erst wird InitGraph aufgerufen (logisch) mit dem Canvas eines tImages, mit putpixel & getpixel (und einigen weiteren funktionen) wird gemalt und mit UpdateScreen wird dann das gemalte auf das tImage gemalt... aber ich glaube das erklärt sich von selbst...

_________________
www.omfg.biz - aktuelles projekt


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 29, 2003 08:00 
Offline
DGL Member

Registriert: Mo Jan 20, 2003 20:10
Beiträge: 424
Wohnort: nähe Starnberg
Also, in alten DOS Zeiten hat man intern ein Array mit den einzelnen Buchstaben und deren Pixel erstellt und dann, wie bei Schreiben unter OpenGL Buchstabe fuer Buchstabe gezeichnent. Nachteilig war, das man immer nur eine Schriftgröße zu Verfügung hatte. Später kamen dann die Vectorschriften hinzu, in dem zu den Buchstaben die Lineführung gespeichert wurde und diese konnte man skalieren.

Oder Du erstellst eine Funktion zu kopieren von Bitmap oder Teile davon und kopierst diese wie in OpenGL.

KidPaddle

_________________
http://www.seban.de


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 17 Queries | GZIP : On ]