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

Aktuelle Zeit: Do Jul 17, 2025 13:57

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



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: glDrawPixels
BeitragVerfasst: Fr Mär 18, 2005 11:37 
Offline
DGL Member

Registriert: Fr Nov 12, 2004 14:58
Beiträge: 76
Wohnort: Aachen
Salut,

ich habe da folgendes Problem. Ich lade ein Bitmap mit der Image Componente von Delphi. Dann wandele ich das Bitmap in ein Daten-Array um und kopiere dieses dann mit DrawPixels in den FrameBuffer.

Es werden nicht nur die Farben falsch sondern auch das Bild verkehrt-Herum dargestellt, obwohl ich an den Einstellungen mit glPixelStore und glPixelTransfer, etc. nix ändere.

Hat jemand ne Idee woran das liegen könnte ?

Hier die wichtigen Sachen:

Bitmap laden und umwandeln
Code:
  1.  
  2. var
  3. temp, scanl : PByte;
  4. [...]
  5. begin
  6.   bmp := TBitmap.Create();
  7.   bmp.LoadFromFile('UShape.bmp');
  8.  
  9.   GetMem(Data,bmp.Height*bmp.Width*3*sizeof(Byte));
  10.   temp := Data;
  11.  
  12.   Image1.Picture.Bitmap := bmp;
  13.  
  14.   for j := 0 to bmp.Height-1 do begin
  15.     scanl := bmp.ScanLine[j];
  16.     for i := 0 to 3*bmp.Width -1 do begin
  17.       temp^ := scanl^;
  18.       inc(PChar(temp),sizeof(Byte));
  19.       inc(PChar(scanl),sizeof(Byte));
  20.     end;
  21.   end;
  22.  


Darstellen:
Code:
  1.  
  2.   glLoadIdentity();
  3.   glClear(GL_COLOR_BUFFER_BIT);
  4.   glRasterPos2f(-3.0,-3.0);
  5.   glDrawPixels(Image1.Picture.Bitmap.Width,Image1.Picture.Bitmap.Height,GL_RGB,GL_UNSIGNED_BYTE, Data);
  6.  
  7.   glColor3f(1.0,0.0,0.0);
  8.   glBegin(GL_LINES);
  9.     glVertex3f(-5,-5,0);
  10.     glVertex3f(3,-5,0);
  11.  
  12.     glVertex3f(-5,-5,0);
  13.     glVertex3f(-5,5,0);
  14.   glEnd();
  15.  


Moderiert von Lossy eX: Code durch Pascaltag ersetzt


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

_________________
Ein Schiff im Hafen ist sicher. Aber dafür werden Schiffe nicht gebaut. (Engl. Sprichwort)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 18, 2005 12:57 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also dein Problem ist vollgendes. Das Bild aus Delphi wird im BGR Format gespeichert. Blau Grün Rot.
Bei OpenGL hingegen sagst du aber, dass das Bild RGB ist.

Entweder kannst du die farben in den einzelnen Pixeln tauschen oder du übergibst bei glDrawPixels ein GL_BGR. Das führt aber bei Grafikkarten die kein OpenGL 1.2 unterstützten zu Problemen. Dann hast du keine Andere wahl als das unzutauschen. Aber eine TNT2 unterstützt das auf jeden Fall auch schon.

Um das andere Problem zu lösen solltes es reichen wenn du die Richtung deine äußeren Schleife änderst.
Code:
  1. for j := bmp.Height-1 downto 0 do begin


PS: Du könntest dort auch die komplette Zeile auf einmal mit dem Befehl Move kopieren. Das ist schneller als jedes Byte einzeln. Das kannst du dir auch in meinem Texturen Loader anschauen. Dort kopiere ich reichlich Bilder.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mär 20, 2005 20:42 
Offline
DGL Member

Registriert: Fr Nov 12, 2004 14:58
Beiträge: 76
Wohnort: Aachen
Lossy eX hat geschrieben:
Also dein Problem ist vollgendes. Das Bild aus Delphi wird im BGR Format gespeichert. Blau Grün Rot.

Warum macht Delphi denn sowas? *kopfschüttel*
Herzlichen Dank.

_________________
Ein Schiff im Hafen ist sicher. Aber dafür werden Schiffe nicht gebaut. (Engl. Sprichwort)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mär 20, 2005 22:00 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 13, 2004 11:00
Beiträge: 229
Wohnort: Steinhude
was heißt hier delphi?
Bmps sind allgemein in bgr und auf dem Kopf abgespeichert.


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


Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 5 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 ]