[C] TGA-Screenshots aus OPenGL Anwendung - verzerrt

Dieses Thema im Forum "C/C++" wurde erstellt von Zico, 13.01.2006.

  1. #1 Zico, 13.01.2006
    Zuletzt bearbeitet: 13.01.2006
    Zico

    Zico Lebende Foren Legende

    Dabei seit:
    16.04.2004
    Beiträge:
    1.559
    Zustimmungen:
    0
    Hallo

    Ich arbeite ja derzeit ein wenig an dem DXX-Rebirth Projekt (www.dxx-rebirth.de).

    Dort gibt es eine Option um Screenshots zu erzeugen. dies funktioniert alles relativ gut, solange ich es auf 16Bit Farbtiefe betreibe. Auf 32Bit werden die Bilder jedoch total verzerrt dargestellt.

    Den Fehler vermute ich irgendwo im TGA-Header. Doch da bin ich sehr überfordert.

    Natürlich wäre es zu viel verlangt euch den gesamten Quellcode aufzudrücken. Daher geb ich euch mal die entsprechende Funktion, die das TGA dann kalkuliert und schreibt. Ich hoffe, dass dort der Fehler irgendwo versteckt ist.

    Code:
    void write_bmp(char *savename,int w,int h,unsigned char *buf){
    	int f;
    #ifdef _WIN32
    	f=open(savename,O_CREAT|O_EXCL|O_WRONLY,S_IREAD|S_IWRITE);
    #else
    	f=open(savename,O_CREAT|O_EXCL|O_WRONLY,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
    #endif
    	if (f>=0){
    		GLubyte    targaMagic[12] = { 0, //no identification field
    			 0,//no colormap
    			 2,//RGB image (well, BGR, actually)
    			 0, 0, 0, 0, 0, 0, 0, 0, 0 };//no colormap or image origin stuff.
    		GLubyte blah;
    		int r;
    		GLubyte *s;
     		int x,y;
    		
    		//write .TGA header.
    		write (f,targaMagic,sizeof(targaMagic));
    		blah=w%256;write (f,&blah,1);//w, low
    		blah=w/256;write (f,&blah,1);//w, high
    		blah=h%256;write (f,&blah,1);//h, low
    		blah=h/256;write (f,&blah,1);//h, high
    		blah=24;write (f,&blah,1);//24 bpp
    		blah=0;write (f,&blah,1);//no attribute bits, origin is lowerleft, no interleave
    		
    		s=buf;
    		for (y=0;y<h;y++){//TGAs use BGR ordering of data.
    			for (x=0;x<w;x++){
    				blah=s[0];
    				s[0]=s[2];
    				s[2]=blah;
    				s+=3;				
    			}
    		}
    		x=0;y=w*h*3;
    		while (y > 0)
    		{
    			r=write(f,buf+x,y);
    			if (r<=0){
    				mprintf((0,"screenshot error, couldn't write to %s (err %i)\n",savename,errno));
    				break;
    			}
    			x+=r;y-=r;
    		}
    		close(f);
    	}else{
    		mprintf((0,"screenshot error, couldn't open %s (err %i)\n",savename,errno));
    	}
    }
    Wie ihr seht, ist das nicht der allerbeste Code...

    Ich hoffe, dass jemand eine Idee hat. Falls jemand doch mehr Code sehen möchte, kann ich diesen gerne komplet zur Verfügung stellen (natürlich nicht in einem Post ;) )

    EDIT: hier ein Beispielbild: http://mitglied.lycos.de/zicoc/dxx/scrn0000.tga

    Vielen Dank im Vorraus
    Christian
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

[C] TGA-Screenshots aus OPenGL Anwendung - verzerrt

Die Seite wird geladen...

[C] TGA-Screenshots aus OPenGL Anwendung - verzerrt - Ähnliche Themen

  1. Mesa 11.0 bringt OpenGL 4.1

    Mesa 11.0 bringt OpenGL 4.1: Die Entwickler der freien 3D-Grafikbibliothek Mesa haben die Version 11.0 veröffentlicht. Diese vorläufig noch experimentelle Version hebt die...
  2. Khronos: Fortschritte bei Vulkan und Erweiterungen für openGL und OpenGL ES

    Khronos: Fortschritte bei Vulkan und Erweiterungen für openGL und OpenGL ES: Die Khronos Group, ein Branchenkonsortium zum Entwickeln von Grafik- und Parallelberechnungs-Standards, hat die Spezifikation OpenGL ES in Version...
  3. OpenGL-Nachfolger Vulkan angekündigt

    OpenGL-Nachfolger Vulkan angekündigt: Die Khronos Group hat den Nachfolger der Standardschnittstelle für 3D-Grafik enthüllt. Die kommende Spezifikation trägt den Namen Vulkan und steht...
  4. Khronos kündigt Next-Gen-Version von OpenGL an

    Khronos kündigt Next-Gen-Version von OpenGL an: Die Khronos Group, das Inustriekonsortium hinter dem Standard für die plattform- und programmiersprachenunabhängige 3D-Grafik-Entwicklung, hat...
  5. Neuer Treiber von AMD unterstützt OpenGL 4.4

    Neuer Treiber von AMD unterstützt OpenGL 4.4: AMD hat eine neue Version seiner proprietären ATI-Treiber veröffentlicht, die die Unterstützung für OpenGL erheblich erweitern. Zudem korrigiert...