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

Aktuelle Zeit: So Aug 17, 2025 00:26

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



Ein neues Thema erstellen Auf das Thema antworten  [ 60 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4  Nächste
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 19, 2005 13:10 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
@sniper: Wie das in etwa aussehen sollte kannst du dir an diesem Post anschauen.

Dem ein oder anderen dürfte auffallen, dass es eine Antwort auf DIESES Thema ist. Da es ja anscheinend mit dem Screenshoot immer noch nicht so ganz funktioniert habe ich mal meinen geposteten Code ausprobiert. Okay. Er ist nicht ganz fehlerfrei. Das Bild stand auf dem Kopf. Habe ich aber gerade korrigiert.

Falls erwünscht kann man am Ende der Methode das Pixelformat auf 24 Bit setzen. Was sich aber auch nur in der Dateigröße wieder spiegelt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 19, 2005 16:47 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
Und nochmals ohne TBitmap...
Code:
  1.  
  2. procedure GLScreenShot_BMP_1(name : string);
  3.  var F : file;
  4.      FileInfo: BITMAPINFOHEADER;
  5.      FileHeader : BITMAPFILEHEADER;
  6.      pPicData:Pointer;
  7.      Viewport : array[0..3] of integer;
  8. begin
  9.  ZeroMemory(@FileHeader, SizeOf(BITMAPFILEHEADER));
  10.  ZeroMemory(@FileInfo, SizeOf(BITMAPINFOHEADER));
  11.  
  12.  glGetIntegerv(GL_VIEWPORT, @Viewport);
  13.  
  14.  FileInfo.biSize := SizeOf(BITMAPINFOHEADER);
  15.  FileInfo.biWidth := Viewport[2];
  16.  FileInfo.biHeight := Viewport[3];
  17.  FileInfo.biPlanes := 1;
  18.  FileInfo.biBitCount := 32;
  19.  FileInfo.biSizeImage := FileInfo.biWidth*FileInfo.biHeight*(FileInfo.biBitCount div <!-- s8) --><img src=\"{SMILIES_PATH}/icon_cool.gif\" alt=\"8)\" title=\"Cool\" /><!-- s8) -->;
  20.  
  21.  FileHeader.bfType := 19778;
  22.  FileHeader.bfOffBits := SizeOf(BITMAPINFOHEADER)+SizeOf(BITMAPFILEHEADER);
  23.  FileHeader.bfSize := FileHeader.bfOffBits + FileInfo.biSizeImage;
  24.  
  25.  GetMem(pPicData, FileInfo.biSizeImage);
  26.  
  27.  // get image as 32-bit format
  28.  glReadPixels(0, 0, Viewport[2], Viewport[3], GL_BGRA, GL_UNSIGNED_BYTE, pPicData);
  29. // glReadPixels(0, 0, FileInfo.biWidth, FileInfo.biHeight, GL_BGRA, GL_UNSIGNED_BYTE, pPicData);
  30.  
  31.   AssignFile(f, name);
  32.   Rewrite( f,1 );
  33.    BlockWrite(F, FileHeader, SizeOf(BITMAPFILEHEADER));
  34.    BlockWrite(F, FileInfo, SizeOf(BITMAPINFOHEADER));
  35.    BlockWrite(F, pPicData^, FileInfo.biSizeImage );
  36.   CloseFile(f);
  37.  
  38.  FreeMem(pPicData, FileInfo.biSizeImage);
  39. end;
  40.  

_________________
"Meine Mutter sagt : 'Dumm ist der, der Dummes tut'." - Forrest Gump


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 19, 2005 18:46 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ich will ja nicht unken aber ich tue es dennoch. ;-)

Nein scherz bei Seite. Bei einem Bitmap gibt es Spacerbytes. Und zwar genau dann wenn die Breite nicht durch 4 Teilbar ist. Das kann bei dir auftreten und somit dürfte das Bild in 3/4tel der geschossenen Bildern kein richtiges Ergebnis beinhalten.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 19, 2005 21:33 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
Zitat:
Und zwar genau dann wenn die Breite nicht durch 4 Teilbar ist.

Hmm...Ich habe es getestet. Bei mir funktioniert es eiwandfrei. :roll:

_________________
"Meine Mutter sagt : 'Dumm ist der, der Dummes tut'." - Forrest Gump


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 20, 2005 05:13 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ich weiß jetzt auch nicht 100%tig ob das auch bei 32 Bits so ist aber mit der Textures.pas und Bilder deren Breite nicht durch 4 teilbar waren ist so etwas immer mal wieder aufgetreten. Und in der werden die Bilddaten auch nur direkt am Stück geschrieben.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 20, 2005 15:21 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ok. Es geht jetzt. Es lag wie gesagt nur am Verschieben von PixelData. Wenn ich nen Hilfszeiger nehm der Wandert und Pixeldata am start lasse, gibts keine Probleme. Danke euch.


Wer macht den Wiki Artikel? 8)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 20, 2005 16:20 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
Darf ich ? Jemand müsste meine Grammatik prüfen. :lol: 8)

_________________
"Meine Mutter sagt : 'Dumm ist der, der Dummes tut'." - Forrest Gump


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 20, 2005 17:04 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 10:44
Beiträge: 991
Wohnort: Karlsfeld (nahe München)
sniper_w hat geschrieben:
Darf ich ? Jemand müsste meine Grammatik prüfen. :lol: 8)

KLAR!! - darfst du den Artikel erstellen! Wenn du willst kannst du dich dazu auch im Wiki anmelden, so das dein Benutzername als alster Autor eingeht :wink: .

_________________
Danke an alle, die mir (und anderen) geholfen haben.
So weit... ...so gut


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mai 22, 2005 20:05 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Okey ein bischen spät aber ich hab eine systemunabhängige variante gebaut.
Diese braucht ledeglich die sysutils, wobei diese auch mit wenigen handgriffen raus zu bekommen ist.

Code:
  1.  
  2. type
  3.     BitmapFileHeader=packed record
  4.         bfType:word;
  5.         bfSize:cardinal;
  6.         bfReserved1:Word;
  7.         bfReserved2:Word;
  8.         bfOffBits:cardinal;
  9.     end;
  10.  
  11.     BitmapInfoHeader=packed record
  12.         biSize:cardinal;
  13.         biWidth:Integer;
  14.         biHeight:Integer;
  15.         biPlanes:Word;
  16.         biBitCount:Word;
  17.         biCompression:cardinal;
  18.         biSizeImage:cardinal;
  19.         biXPelsPerMeter:Integer;
  20.         biYPelsPerMeter:Integer;
  21.         biClrUsed:cardinal;
  22.         biClrImportant:cardinal;
  23.     end;
  24. .....
  25. procedure Make_Screenshot(width,height:integer);
  26. var path,filename:string;
  27.       infoheader:bitmapinfoheader;
  28.       fileheader:bitmapfileheader;
  29.       image:pointer;
  30.       f:file;
  31.       i:cardinal;
  32. begin
  33.   with fileheader do
  34.   begin
  35.     bfType:=19778; //ergibt BM
  36.     bfSize:=sizeof(fileheader)+sizeof(infoheader)+(Width*Height*3);
  37.     bfOffBits:=sizeof(fileheader)+sizeof(infoheader);
  38.   end;
  39.  
  40.   with infoheader do
  41.   begin
  42.     biSize:=sizeof(infoheader);
  43.     biWidth:=width;
  44.     biHeight:=height;
  45.     biPlanes:=1;
  46.     biBitCount:=24;
  47.     biSizeImage:=Width*Height*3;
  48.   end;
  49.  
  50.   getmem(image,width*height*3);
  51.  
  52.   glReadPixels( 0, 0, Width, Height, GL_BGR_EXT, GL_UNSIGNED_BYTE, image );
  53.  
  54.   getdir(0,path);
  55.  
  56.   i:=0;
  57.   while i=i do
  58.   begin
  59.   filename:=path+'/scrshot'+inttostr(i)+'.bmp';
  60.     if FileExists(filename)=false then
  61.       break
  62.     else
  63.       inc(i);
  64.   end;
  65.   Assign(f, filename);
  66.   Rewrite(F,1);
  67.   BlockWrite(f,fileheader,sizeof(fileheader));
  68.   BlockWrite(f,infoheader,sizeof(infoheader));
  69.   BlockWrite(f,image^,height*width*3);
  70.   Close(F);
  71.   freemem(image);
  72. end;
  73.  


Die Funktion ruft man ledeglich auf und sie erstellt eine Bitmap mit 24Bit Farbtiefe.
Als i Tüpfelchen numeriert sie die Screenshots aufsteigend.
MfG TAK2k4

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mai 22, 2005 20:19 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
@Tak: Öhm...wieso muss man bei dir die ausmaße angeben? Screenshots haben doch immer die größe des Screens.

@Sniper_w: Wie siehts mit dem Wikiartikel aus? Hast du noch interesse. Ich/Wir fänden einen entsprechenden Wiki-Artikel fein. 8)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mai 22, 2005 22:36 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
Die Interese besteht. Nun leider finde ich sehr wenig Zeit um so etwas zu schreiben. Ich brauche natürlich auch jemanden, der das dann auf überprüft (Ortographie ) :wink:

_________________
"Meine Mutter sagt : 'Dumm ist der, der Dummes tut'." - Forrest Gump


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mai 23, 2005 10:57 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Das Wiki braucht nur den Artikel. Die Rechtschreibung wird dann automatisch von jedem der Fehler findet korrigiert. Das is nicht so wie bei Tutorials. Da dürfen nur Admins dran rumbauen. Bei den Allgemeinen Artikeln kann jeder Fehler beseitigen, und das klappt momentan ganz gut.

PS: Der leere Artikel steht hier bereit: http://wiki.delphigl.com/index.php/Techniken_und_Algorithmen#Sonstiges

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mai 23, 2005 15:39 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 10:44
Beiträge: 991
Wohnort: Karlsfeld (nahe München)
So ich habe mir mal die Freiheit genommen und den Artikel Screenshot erstellt. Bisher enthält der Artkiel nur eine Anweisung wie man ohne Vertauschen der RGB Werte ein 24 Bit Bild im TGA Format speichert. Alle andern Methoden kann wer möchte noch nachtragen.

_________________
Danke an alle, die mir (und anderen) geholfen haben.
So weit... ...so gut


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 24, 2005 17:00 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
ich möchte einen screenshot von einem opengl window machen, welches auf einem panel liegt, und dabei nur das panel screenshotten, wie mache ich des ? EDIT: Mit BitBlt hab ichs jetzt so hinbekommen:
Code:
  1.  
  2. procedure TMainForm.Button1Click(Sender: TObject);
  3. var
  4.   Screenshot: TBitmap;
  5. begin
  6.   if savedialog1.execute then
  7.     begin
  8.       Screenshot := TBitmap.Create;
  9.       try
  10.         Screenshot.Width := Preview.Width;
  11.         Screenshot.Height := Preview.Height;
  12.         BitBlt(Screenshot.Canvas.Handle, 0, 0, Screenshot.Width, Screenshot.Height, DC, 0, 0, SRCCOPY);
  13.         Screenshot.savetofile(savedialog1.filename);
  14.       finally
  15.         Screenshot.Free;
  16.       end;
  17.     end;
  18. end;
  19.  


funzt aber nur selten, weil der dialog stört, meistens ist das bild leer, naja ich versuchs dann doch anders ...


Zuletzt geändert von Seth am Di Mai 24, 2005 18:29, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 24, 2005 17:53 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
Die Antwort würde schon gegeben. Du musst das Thread nochmals lesen.

_________________
"Meine Mutter sagt : 'Dumm ist der, der Dummes tut'." - Forrest Gump


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 60 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4  Nächste
Foren-Übersicht » Programmierung » OpenGL


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.010s | 13 Queries | GZIP : On ]