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

Aktuelle Zeit: Fr Jul 18, 2025 14:23

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



Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: glReadPixels
BeitragVerfasst: Mi Jun 04, 2008 13:36 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
Fügt das glReadPixels am Ende jeder Zeile noch irgendwelche Daten ein?
Mein Problem ist folgendes: Ich hole mir die Daten im RGB-Format aus dem Framebuffer und sende sie an eine PDF-Lib, welche das Bild in der PDF "malen" soll.

Code:
  1. GetClientRect(&rect);
  2.  
  3. std::vector<unsigned char> m_dataGraph;
  4. m_dataGraph.resize(rect.Width() * rect.Height() * 24);
  5. glReadPixels(0,0,rect.Width(),rect.Height(),GL_RGB,GL_UNSIGNED_BYTE,&m_dataGraph[0]);
  6.  
  7. . . .
  8.  
  9. HPDF_Image pic = HPDF_LoadRawImageFromMem(pdf,&m_dataGraph[0],m_rect.Width(),m_rect.Height(),HPDF_CS_DEVICE_RGB,8);


So das Ergebnis in der PDF kann man im Anhang des Posts "bewundern". Da scheint irgendwie an den Zeilen noch was dran zu sein.
Weiß da wer was zu bezüglich glReadPixels?


MfG Pellaeon


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

_________________
__________
"C++ is the best language for garbage collection principally because it creates less garbage." Bjarne Stroustrup


Zuletzt geändert von Pellaeon am Mi Jun 04, 2008 19:39, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 04, 2008 17:25 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
wäre gut, wenn du auch noch einen screenshot von dem Ausgangsbild posten würdest. So kann ich da leider nicht viel erkennen.

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 04, 2008 19:39 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
ok hängt mit dran

_________________
__________
"C++ is the best language for garbage collection principally because it creates less garbage." Bjarne Stroustrup


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 05, 2008 15:41 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Bist du sicher, dass es an glReadPixels liegt und nicht an der PDF-Lib-Funktion? Denn meiner Ansicht nach müsste der Aufruf komplett korrekt sein.

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jun 06, 2008 16:59 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
Sicher bin ich mir nicht. Ich habe im Forum zu der Lib gefragt. Und der meinte, dass die Daten die ich reinstecke keine "Rohdatendaten" sind, sondern am Zeilenende noch was dran haben. Aber laut Doku bon glReadPixels dürfte der ja nichts hinten ranschreiben.

_________________
__________
"C++ is the best language for garbage collection principally because it creates less garbage." Bjarne Stroustrup


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jun 06, 2008 19:19 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 06, 2005 18:34
Beiträge: 362
Wohnort: Hamburg
Hi ...

hast du irgend etwas mit glPixelStore geändert?
Solche Probleme treten wohl gerne auf wenn sich die Werte da ändern, bzw. können sie wohl auch auftreten wenn man nicht die richtigen Werte setzt.
Die Größe des Viewports hängt anscheinend auch irgendwie damit zusammen.

Musst mal danach Googeln, da findest du einige Beschreibungen von Problemen die mindestens so ähnlich sind wie deins.

Gruß
Shai

_________________
Der Mensch hat neben dem Trieb der Fortpflanzung und dem zu essen und zu trinken zwei Leidenschaften: Krach zu machen und nicht zuzuhören. (Kurt Tucholsky)
Schwabbeldiwapp, hier kommt die Grütze. (Der Quästor)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 07, 2008 08:58 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo Pellaeon,

versuch mal statt dem vector ein normales unsigned char -Array zu nehmen. :)

Viele Grüße
dj3hut1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 07, 2008 18:31 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 06, 2005 18:34
Beiträge: 362
Wohnort: Hamburg
@dj3hut1
Der vector sollte eigentlich kein Problem darstellen.
Zitat:
Vector containers are implemented as dynamic arrays; Just as regular arrays, vector containers have their elements stored in contiguous storage locations, which means that their elements can be accessed not only using iterators but also using offsets on regular pointers to elements.

(http://www.cplusplus.com/reference/stl/vector/)

D.h. es ist durchaus zulässig, den Pointer auf das erste Element des Vektors zu übergeben.

_________________
Der Mensch hat neben dem Trieb der Fortpflanzung und dem zu essen und zu trinken zwei Leidenschaften: Krach zu machen und nicht zuzuhören. (Kurt Tucholsky)
Schwabbeldiwapp, hier kommt die Grütze. (Der Quästor)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 07, 2008 19:01 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
Jo in dem Vektor ist zum Schluss nichts anderes als ein "ordinäres" unsigned char Feld drinnen. Und solange ich keine Elemente anfüge, sind auch die Adressen ok.

_________________
__________
"C++ is the best language for garbage collection principally because it creates less garbage." Bjarne Stroustrup


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 07, 2008 19:34 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo,

hmm...das zweite Bild macht noch irgendwie den Eindruck, als würde die width-Angabe nicht ganz stimmen, jede Zeile scheint um einen Pixel verrutscht zu sein.
Hast du es schonmal mit width+1 und height+1 bei HPDF_LoadRawImageFromMem probiert?

Viele Grüße
dj3hut1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 08, 2008 11:41 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
dj3hut1 hat geschrieben:
hmm...das zweite Bild macht noch irgendwie den Eindruck, als würde die width-Angabe nicht ganz stimmen, jede Zeile scheint um einen Pixel verrutscht zu sein.

Für mich sieht es eher so aus, als wäre jede Zeile um 1/3 Pixel verrutscht. Zumindest ist die Verschiebung nicht grade quadratisch.

Code:
  1. m_dataGraph.resize(rect.Width() * rect.Height() * 24);

Wieso eigentlich 24? Es kommen doch nur 3 unsigned chars (R, G und B) für jedes Pixel raus?

MfG


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 09, 2008 10:16 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
WhiteHunter hat geschrieben:
Wieso eigentlich 24? Es kommen doch nur 3 unsigned chars (R, G und B) für jedes Pixel raus?


Danke für den Hinweis. Irgenwie war ich in Gedanken bei den 24 Bit anstatt der 3 mal 8 Byte^^

dj3hut1 hat geschrieben:
Hast du es schonmal mit width+1 und height+1 bei HPDF_LoadRawImageFromMem probiert?


Das funktioniert nicht, aber mit -1 geht es. :)

Danke für Hilfe an alle


MfG Pellaeon

_________________
__________
"C++ is the best language for garbage collection principally because it creates less garbage." Bjarne Stroustrup


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 09, 2008 10:56 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Sorry. Hab das Thema erst jetzt so richtig wahrgenommen. :-/

Meines wissens nach arbeitet glReadPixels mit einem 4 Byte (32 Bit) Alignment. Also per default. Aus dem Grund hatte ich bei GrabScreen in der glBitmap auch immer das Alginment explizit auf 1 gesetzt.
Code:
  1. glPixelStorei(GL_PACK_ALIGNMENT, 1);


Im Zweifel frag einfach mal den Wert ab.
Code:
  1.   glGetIntegerv(GL_PACK_ALIGNMENT, @Pack);


Hab ich gerade mal bei mir gemacht und raus kam 4.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 09, 2008 16:32 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
Danke Lossy,

jo mit dem Ändern der Aligment funktiert das auch wunderbar :)


MfG Pellaeon

_________________
__________
"C++ is the best language for garbage collection principally because it creates less garbage." Bjarne Stroustrup


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.011s | 15 Queries | GZIP : On ]