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

Aktuelle Zeit: Mo Jun 17, 2024 16:20

Foren-Übersicht » English » English Programming Forum
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Picture from the scene
BeitragVerfasst: Di Mai 22, 2007 13:18 
Offline
DGL Member

Registriert: Do Feb 01, 2007 12:24
Beiträge: 5
Do anybody know how to make a picture from the scene I have created in OprnGL?
(Something like screnshot)
I am drawing the scene in to the Panel.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 22, 2007 15:09 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 31, 2005 11:02
Beiträge: 432
Wohnort: Rheinlandpfalz
Hi,
works for me with something like this:
Code:
  1. unit PrtScr;
  2.  
  3. INTERFACE
  4.  
  5. Uses SysUtils, windows, dglOpenGL;
  6.  
  7. Type
  8.   BITMAPFILEHEADER = packed record
  9.     bfType: Word;
  10.     bfSize: DWORD;
  11.     bfReserved1: Word;
  12.     bfReserved2: Word;
  13.     bfOffBits: DWORD;
  14.   end;
  15.  
  16.   BITMAPINFOHEADER = packed record
  17.     biSize: DWORD;
  18.     biWidth: Longint;
  19.     biHeight: Longint;
  20.     biPlanes: Word;
  21.     biBitCount: Word;
  22.     biCompression: DWORD;
  23.     biSizeImage: DWORD;
  24.     biXPelsPerMeter: Longint;
  25.     biYPelsPerMeter: Longint;
  26.     biClrUsed: DWORD;
  27.     biClrImportant: DWORD;
  28.   end;
  29.  
  30.   Procedure ScreenShot(const FileName: string; NumChar: Char);
  31.  
  32.  
  33. IMPLEMENTATION
  34.  
  35.  
  36. Procedure ScreenShot(const FileName: string; NumChar: Char);
  37. var F          : file;
  38.     FileInfo   : BITMAPINFOHEADER;
  39.     FileHeader : BITMAPFILEHEADER;
  40.     pPicData   : Pointer;
  41.     Viewport   : array[0..3] of integer;
  42.     FileNameNr : string;
  43.     i          : word;
  44. Begin
  45.   // Nummerierung (Falls es DateiNamen schon gibt)
  46.   i := 0;
  47.   Repeat
  48.     inc(i);
  49.     FileNameNr := FileName;
  50.     Insert(NumChar + inttostr(i), FileNameNr, Length(FileNameNr)-3);
  51.   Until (not FileExists(FileNameNr));
  52.  
  53.   // Speicher für die Speicherung der Header-Informationen vorbereiten
  54.   ZeroMemory(@FileHeader, SizeOf(BITMAPFILEHEADER));
  55.   ZeroMemory(@FileInfo, SizeOf(BITMAPINFOHEADER));
  56.  
  57.   // Größe des Viewports abfragen
  58.   glGetIntegerv(GL_VIEWPORT, @Viewport);
  59.  
  60.   // Initialisieren der Daten des Headers
  61.   FileHeader.bfType := 19778; //$4D42 = 'BM'
  62.   FileHeader.bfOffBits := SizeOf(BITMAPINFOHEADER)+SizeOf(BITMAPFILEHEADER);
  63.  
  64.   // Schreiben der Bitmap-Informationen
  65.   FileInfo.biSize      := SizeOf(BITMAPINFOHEADER);
  66.   FileInfo.biWidth     := Viewport[2];
  67.   FileInfo.biHeight    := Viewport[3];
  68.   FileInfo.biPlanes    := 1;
  69.   FileInfo.biBitCount  := 32;
  70.   FileInfo.biSizeImage := FileInfo.biWidth*FileInfo.biHeight*(FileInfo.biBitCount div <!-- s8) --><img src=\"{SMILIES_PATH}/icon_cool.gif\" alt=\"8)\" title=\"Cool\" /><!-- s8) -->;
  71.  
  72.   // Größenangabe auch in den Header übernehmen
  73.   FileHeader.bfSize := FileHeader.bfOffBits + FileInfo.biSizeImage;
  74.  
  75.   // Speicher für die Bilddaten reservieren
  76.   GetMem(pPicData, FileInfo.biSizeImage);
  77.   try
  78.     // Bilddaten von OpenGL anfordern
  79.     glReadPixels(0, 0, Viewport[2], Viewport[3], GL_BGRA, GL_UNSIGNED_BYTE, pPicData);
  80.  
  81.     // Bilddaten in die Datei schreiben
  82.     AssignFile(f, FileNameNr);
  83.     Rewrite(f, 1);
  84.     try
  85.       BlockWrite(F, FileHeader, SizeOf(BITMAPFILEHEADER));
  86.       BlockWrite(F, FileInfo, SizeOf(BITMAPINFOHEADER));
  87.       BlockWrite(F, pPicData^, FileInfo.biSizeImage );
  88.     finally
  89.       CloseFile(f);
  90.     end;
  91.  
  92.   finally
  93.     // Angeforderten Speicher wieder freigeben ...
  94.     FreeMem(pPicData, FileInfo.biSizeImage);
  95.   end;
  96. End;
  97.  
  98. end.


Sorry for German Comments :wink:

_________________
http://texelviews.delphigl.com


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 » English » English Programming Forum


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 10 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.059s | 17 Queries | GZIP : On ]