Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » DirectX » png datei in Surface

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
05.04.2007, 20:08 Uhr
kurt



hallo leute,

ich hab in einen anderen forum ne funktion gefunden die png dateien läd und in einem LPDIRECTDRAWSURFACE7 speichert mithilfe der Corona-Lib.


C++:
LPDIRECTDRAWSURFACE7 CreateSurfaceFromPNG(LPCTSTR File)
{
   // Oberflächenbeschreibung
    DDSURFACEDESC2 SurfDesc;  
    
    // Zeiger auf die Oberfläche
   LPDIRECTDRAWSURFACE7 lpDDSurface = NULL;


   int dWidth;                  //Breite des Bildes    
   int dHeight;               //Höhe des Bildes
   LPSTR lpzielSpeicher;         //Zielspeicher
   LPSTR lpQuellSpeicher;         //Quellspeicher

   corona::Image *pImage = corona::OpenImage(File,corona::FF_AUTODETECT,corona::PF_R8G8B8A8);
   //Bild wird geladen
   corona::ConvertImage(pImage,corona::PF_B8G8R8A8);
   //Bild wird in eine BMP datei konvertiert ?
   dWidth = pImage->getWidth();
   dHeight = pImage->getHeight();
   void *pPixels = pImage->getPixels();  
   // Oberflächenbeschreibung initialisieren
    ZeroMemory(&SurfDesc, sizeof(SurfDesc));
   SurfDesc.dwSize = sizeof(SurfDesc);

   SurfDesc.dwFlags =   DDSD_CAPS  | DDSD_HEIGHT | DDSD_WIDTH;

    SurfDesc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
   SurfDesc.dwWidth  = dWidth;
   SurfDesc.dwHeight = dHeight;;

    
   if(FAILED(lpDD->CreateSurface(&SurfDesc,&lpDDSurface,NULL)))
    {
        return 0;
    }

   lpDDSurface->Lock(NULL,&SurfDesc, DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT, NULL);

    lpzielSpeicher = (LPSTR)SurfDesc.lpSurface;
   lpQuellSpeicher = (LPSTR)(&pPixels);

   for(int j=0;j<dHeight;j++)
   {
  memcpy(lpzielSpeicher,lpQuellSpeicher,dWidth);
//kopiert falschen speicher
      lpzielSpeicher+= SurfDesc.lPitch;
      lpQuellSpeicher -= SurfDesc.dwWidth;
   }

   lpDDSurface->Unlock(NULL);

   delete pImage;

    return lpDDSurface;
}



www.zfx.info/DisplayThread.php?MID=152511#152511


ich will dieses Surface in ein CSurface reinhaben... das mach ich der Funktion CSurface::Create(LPDIRECTDRAWSURFACE7 ddsd)...

dann gibbet es aber einen fehler.. kann mir jemand helfen.. BÜTTE



MFG kurt
--
der tod ist sicher... das leben nicht... !!

Dieser Post wurde am 05.04.2007 um 20:09 Uhr von kurt editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.04.2007, 23:20 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


was kommt denn fürn fehler? meine glaskugel ist wiedermal in reparatur ... (drecks teil geht dauernd kaputt )
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.04.2007, 10:38 Uhr
kurt



ahh sorry...


Code:
Unhandled exception at 0x004129d9...


und dann springt er in die Funktion CSurface::Create(LPDIRECTDRAWSURFACE7 pdds) und zwar in die zeile:


C++:
m_pdds = pdds;



hab ich mir so gedacht das der rückgabewert der funktion nich hinhaut... weiß aber nich was daran falsch is... ??????


MFG kurt
--
der tod ist sicher... das leben nicht... !!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
06.04.2007, 14:30 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Zeig mal wo du das wie benutzt, evtl haste nur


C++:
CSurface *surface;

surface->Create(...);




geschrieben? Das würde die unhandled exception erklären.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
06.04.2007, 16:31 Uhr
kurt



ich hab das wirklich so geschrieben...


C++:
CSurface *surface;
HRESULT hr;

HRESULT Init()
{
...
hr = surface->Create(CreateSurfaceFromPNG("xyz.png"));
if (hr < 0)
      return hr;
...
}



vereinfacht sieht es so aus... in der Create-Funktion wird das LPDIRECTDRAWSURFACE7 pdds an die membervariable des CSurface übergeben und zwar:


C++:
HRESULT CSurface::Create(LPDIRECTDRAWSURFACE7 pdds)
{
m_pdds = pdds;                        // hier die exception
...
}



und dann geht eben gar nichts mehr bzw kommt der fehler... was muss ich da noch machen??

danke für deine hilfe

MFG kurt
--
der tod ist sicher... das leben nicht... !!

Dieser Post wurde am 06.04.2007 um 16:35 Uhr von kurt editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
07.04.2007, 09:57 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


benutz


C++:
CSurface surface;



sonst ruft er ja das Create für ein ungültiges Objekt auf -> Crash
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
07.04.2007, 12:31 Uhr
kurt



toll.. damit klappt es

jetzt hab ich nur das problem das es ein total komisches bild anzeigt wird, was in keinster weise dem original ähnelt...

anderes muster andere farbe und der alphachannel is auch nich drin...

hast du ne ahnung warum das so is und wie kann ich dem aus dem weg gehen??



MFG kurt
--
der tod ist sicher... das leben nicht... !!

Dieser Post wurde am 07.04.2007 um 12:32 Uhr von kurt editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ DirectX ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: