Größenbegrenzung beim allozieren von Speicher????



  • uff du hast Recht, das Bild ist viel kleiner, und zwar 71.7kb
    Nun, ich habe die Stelle wo ich die Größeninformationen herzubekommen versuche mal untersucht und bin zu dem Schluss gekommen, dass ich den Integer Counter vielleicht auf 0 setzen sollte. Interessanterweise ist mein Programm dann zu dem Schluss gekommen, dass meine Bilddatei nicht 2117503966 Byte sondern 5 Byte groß ist, was ebenso falsch ist.
    Hier mal die entsprechende Stelle mit der ich versucht habe die Größe der Bilddatei korrekt zu ermitteln.
    ifstream bmp(".\\ohje.png");
    char c;
    UINT counter = 0;
    clog << "Sammle Größeninformationen" << endl;
    while(bmp.get(c))
    counter++;
    clog << "Character Array erstellen: " << counter << endl;
    char* bytes = new char[counter];
    wie kommt der da auf 5 ?



  • wieso liest du nicht die dateigröße vom filesystem ein?



  • Weil ich erst vor kurzem von C# auf C++ umgestiegen bin und nicht weiß wie ich das mache



  • elektrische gitarren schrieb:

    wieso liest du nicht die dateigröße vom filesystem ein?

    die info wird ihm nicht viel bringen, wenn er das bild im speicher in pixel repräsentieren will. dafür muss man die größeninformationen aus dem header herauslesen.

    musst du png einsetzen? ist nicht weiter wild, aber wenn du es dir aussuchen kannst, würd ich ppm nehmen http://de.wikipedia.org/wiki/Portable_Pixmap das format ist wirklich sehr einfach und entsprechende reader/writer hat man sich in 5 zeilen zusammengecodet.



  • Bei dem Format fehlt mir der Alphachannel
    Im Grunde wäre es sogar am besten(aber nicht zwingend notwendig) wenn mindestens .png, .bmp und .jpg gehen würden



  • gleich soviele? 😉 dann nimm am besten ne lib dazu. imagemagick oder so



  • ok, ich werds mir ma angucken... aber, ist das nicht etwas übertrieben nur um die Größe des Bildes rauszufinden? Denn die Verwendung des Bildes übernimmt Direct3D und ich arbeite dann nur noch mit einer Textur
    edit: zumindest hat es das beim lesen aus einer Datei getan, FromFileInMemory dürfte dann hoffentlich das selbe tun
    edit:
    wenn ichs mir überlege reicht eigentlich .png



  • Du solltest auf jeden Fall eine Library verwenden, welche die PNG-Datei in den Speicher läd. Dann hast du den Zeiger auf die Bilddaten sowie die Größe des Bildes. Das selbst zu programmieren, hat wohl keinen Sinn (dafür scheint dein Kenntnisstand einfach zu gering).



  • Ankou schrieb:

    aber, ist das nicht etwas übertrieben nur um die Größe des Bildes rauszufinden?

    wenn du keine lib verwendest, musst du selbst methoden implementieren, um diese informationen aus den bildern zu extrahieren. jede simple image lib kann das für dich übernehmen. wozu dinge nochmal implementieren, die es bereits gibt?



  • Das Problem dabei ist aber, dass ich die Bilder ja im Speicher haben will um sie zu verschlüsseln, wobei, und das is jetzt von mir wohl ein bisschen blöd gemacht, lässt sich aber nicht mehr ändern, die Verschlüsselung in C# & .NET erfolgen soll, die entschlüsselung dann letztlich aber in C++, wodurch ich beim verschlüsseln nicht auf die selbe Bibliothek zugreifen könnte.
    Daher kann ich nicht direkt mit der Library die Bilder in den Speicher laden, da sie ja eben nich im Bildformat gespeichert sind...


Anmelden zum Antworten