• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

In C++ PNG statt BMP laden

HTMLooser

Neues Mitglied
Hallo,

ich möchte gerne in c++ grafiken laden.
das ist bisher kein problem.
aber nun möchte ich teiltransparente dateien im png format statt bmp laden,
aber hab keine idee wie das gehen soll.
kann mir da jemand helfen?

hier mein
Code:
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#a31515][SIZE=2][COLOR=#a31515]<windows.h>[/COLOR][/SIZE][/COLOR][/SIZE]
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#a31515][SIZE=2][COLOR=#a31515]<stdio.h>[/COLOR][/SIZE][/COLOR][/SIZE]
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#a31515][SIZE=2][COLOR=#a31515]<glu.h>[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#008000]
[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#a31515][SIZE=2][COLOR=#a31515]<gl\gl.h>[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#008000]
[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#a31515][SIZE=2][COLOR=#a31515]<glaux.h>[/COLOR][/SIZE][/COLOR][/SIZE]
[SIZE=2][COLOR=#008000]
[/COLOR][/SIZE][SIZE=2]HGLRC hRC=NULL; [/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// Der OpenGL Rendering Context[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]HDC hDC=NULL; [/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// Gerte Kontext[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]HWND hWnd=NULL; [/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// Verweist spter auf den Windows Handle[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]HINSTANCE hInstance; [/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// Die Instanz der Anwendung[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]bool[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] keys[256]; [/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// Vektor (Array) der den Status [/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// einzelner Tasten enthlt [/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// (gedrckt/nicht gedrckt)[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]bool[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] active=TRUE; [/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// Wenn active FALSE ist, wurde das [/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// Fenster vom Benutzer minimiert.[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]bool[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] fullscreen=TRUE; [/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// Luft das Programm im Vollbildmodus [/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// oder nicht?[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] jump;[/SIZE]
[SIZE=2]BOOL wp; [/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// W Pressed?[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]BOOL ap; [/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// A Pressed?[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]BOOL sp; [/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// S Pressed?[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]BOOL dp; [/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// D Pressed?[/COLOR][/SIZE]
 
 
[/COLOR][/SIZE][SIZE=2]GLfloat xheight; [/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// Rotation um die X-Achse[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]GLfloat ywidth; [/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// Rotation um die Y-Achse[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]GLuint texture[1]; [/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// Texturspeicher[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); [/SIZE]
[SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// WndProc wird deklariert[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]GLvoid ReSizeGLScene(GLsizei width, GLsizei height) [/SIZE]
[SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// Initialisierung des OpenGL-Fensters[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]{[/SIZE]
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]if[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] (height==0)[/SIZE]
[SIZE=2]{ [/SIZE]
[SIZE=2]height=1; [/SIZE]
[SIZE=2]}[/SIZE]
[SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// height darf nicht 0 sein, damit es im spteren [/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// Programmablauf nicht zu einer Division durch 0 kommt.[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]glViewport(0, 0, width, height);[/SIZE]
[SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// Hier wird der Mittelpunkt auf den die Perspektive zuluft [/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// zurckgesetzt.[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]glMatrixMode(GL_PROJECTION); [/SIZE]
[SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// Hier wird die Projektionsmatrix festgelegt[/COLOR][/SIZE]
[/COLOR][/SIZE]
[SIZE=2]glLoadIdentity(); [/SIZE]
[SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// und angepasst[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f); [/SIZE]
[SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// Hier wird die das Verhltnis der Hhe zur Breite bergeben[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// und der Verzerrungswinkel von 45 Grad bergeben[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]glMatrixMode(GL_MODELVIEW); [/SIZE]
[SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// Hier wird die sogenannte modelview-Matrix festgelegt[/COLOR][/SIZE]
[/COLOR][/SIZE]
[SIZE=2]glLoadIdentity(); [/SIZE]
[SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// und angepasst.[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]}[/SIZE]
[SIZE=2]AUX_RGBImageRec *LoadPNG([/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]char[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] *Filename) [/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// Ldt ein BMP[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]{[/SIZE]
[SIZE=2]FILE *File=NULL; [/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// Das File Handle[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]if[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] (!Filename) [/SIZE]
[SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// Ist ein Dateiname bergeben worden?[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]{[/SIZE]
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]return[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] NULL; [/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// offenbar nicht... Abbruch[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]}[/SIZE]
[SIZE=2]File=fopen(Filename,[/SIZE][SIZE=2][COLOR=#a31515][SIZE=2][COLOR=#a31515]"r"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]); [/SIZE]
[SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// Versuch die Datei zu ffnen[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]if[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] (File) [/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// Existiert die Datei?[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]{[/SIZE]
[SIZE=2]fclose(File); [/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// Datei schlieen[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]return[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] auxDIBImageLoad(Filename); [/SIZE]
[SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// BMP laden und Zeiger (Pointer) zurckgeben, [/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// der auf die Bilddaten verweist[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]}[/SIZE]
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]return[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] NULL; [/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// Laden hat nicht geklappt[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]}[/SIZE]
 
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] LoadGLTextures() [/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// Bitmaps laden und konvertieren[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]{[/SIZE]
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] Status=FALSE; [/SIZE]
[SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// Status ersteinmal auf FALSE setzen[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]AUX_RGBImageRec *TextureImage[1]; [/SIZE]
[SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// Speicherplatz fr die Textur schaffen[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]memset(TextureImage,0,[/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]sizeof[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]([/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] *)*1); [/SIZE]
[SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]//Vorher sichergehen das dieser auch leer ist[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]if[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] (TextureImage[0]=LoadBMP([/SIZE][SIZE=2][COLOR=#a31515][SIZE=2][COLOR=#a31515]"auge.bmp"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]))[/SIZE]
[SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// Bitmap laden[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]{[/SIZE]
 
Hast du selber schon danach gesucht? Gib doch einfach mal in google die von dir verwendete Library + "load png" ein, du findest sicherlich etwas!
 
Ich habe jetzt eine weile gegoogelt, aber wie so oft sind dabei nur schnipsel rausgekommen, von denen keiner den anfang oder das ende kennt.
hat jemand eine brauchbare methode und eine anleitung dazu?

danke im voraus.
 
Ich habe vorhin (unabhängig von seinem Post) auch genau das gemacht, was Commodore vorgeschlagen hat, und nach "opengl load png" gesucht und befunden, dass es da nicht "die" Lösung gibt, sondern das sowas wohl eher über weitere Libraries gelöst wird.

Wenn dein Code komplett und irgendwie halbwegs problemlos testbar wäre und ich wüsste, dass der Ansatz was taugt, hätte ich mal ein wenig rumprobiert. Aber ich denke, dass du das irgendwo kopiert hast und auch nicht so recht weißt, was du da tust? Das ist natürlich nicht weiter schlimm, jeder hat mal klein angefangen, aber es motiviert nicht gerade, zu versuchen, sich selbst dort einzuarbeiten.

Abgesehen davon: Die Programmierung wird nicht unbedingt einfacher, wenn du dieses Problem gelöst hast. Sieh es vielleicht als gute Übung oder Selbsttest an, dich da reinzukämpfen. :)
 
das ich es nicht komplet selbstgeschrieben hab stimmt, ich habe das für meine bisherige programmierung als vorlage genommen, und das mit den neuen libs ist auch klar. aber ich finde keinegeeignete lib , die man auch irgendwo herbekommt.
das ist mein anliegen.
 
Zurück
Oben