(MFC mit dem...) Bitmaps als JPG abspeichern?



  • du musst auch schonmal selbst ein bisschen rumgucken; du kannst nicht erwarten, dass die die Leute hier dein Programm zusammenschrauben...



  • Schau dir mal OleCreatePictureIndirect und OleSave an.



  • ok, danke @ all





  • @WebFritzi
    Und wie funzt das Ganze?

    Ich kann zwar JPEG laden mit OleLoadPicturePath, wenn ich aber mit OleCreatePictureIndirect ein IPicture erstelle, kann ich nur ein HBITMAP, ein HICON oder ein WMF angeben.
    Nur wie weiss IPicture::SaveAsFile, dass es dieses HBITMAP als JPEG speichern soll?



  • Mal abgesehen von Renes frage die mich auch interessiert, wie bekomme ich überhaupt so nen Stream ding hin? Ich habe in der MSDN nicht gefunden wie ich son Stream auf eine Datei lenken kann... *Anfall krieg*

    nap



  • Weiß hier auch niemand wie IStream funktioniert? *heul*



  • Diese Diskussion hier interessiert mich auch sehr, da ich es noch nie geschafft habe ein HBITMAP als Jpg/Jpeg zu speichern - hat das hier noch niemand geschafft? 😕



  • doch ich! Aber nicht mit einem IStream. Da kann ich nicht helfen...



  • HI!
    Mir ist IStream eigentlich egal wenn du ne bessere Lösung hast 😉
    Kannst du sie vielleicht ausführlich beschreiben so dass man sie versteht? 😃

    nap



  • Hi. Keine Ahnung, ob es die bessere Lösung ist. Ich verwende wie die Beispiele auf codeguru.com die [urlftp://ftp.simtel.net/pub/simtelnet/msdos/graphics/jpegsr6.zip]libjpeg.lib[/url] von der IJG.
    Klar, man kann damit nicht direkt mit einem einfachen Funktionsaufruf ein HBITMAP als JPEG speichern, da die Bibliothek plattformunabhängig arbeitet.

    Schritt 1 - Bibliothek erstellen
    Wenn man MS VC++ verwendet, ist es kein Problems die Bibliothek über die IDE zu erstellen, siehe Install.doc. Bei einem anderen Compiler muß ein geeignetes makefile nehmen ggf. anpassen und die Bibliothek mit make erstellen.

    Schritt 2 - JPEG speichern
    Das erfordert etwas Programmierarbeit. Ist aber in der beiliegenden Dokumentation gut beschrieben.
    Grobe Schritte für dein Problem:
    - Wenn du keine DIBSection hast, dann die RGB Werte mit GetDIBits aus dem HBITMAP holen
    - Errorhandler installieren
    - Datei zum Schreiben öffnen
    - JPEG Objekt initialisieren
    - Bild Attribute setzen: Höhe, Breite, Farbtiefe und ggf. Qualität
    - Schleife: Bilddaten zeilenweise an Kompressor übergeben, von unten nach oben, RGB->BGR
    - Kompression abschließen, Datei schließen

    Etwas komplexeres Beispiel ist hier



  • Hi!
    Vielen Dank für die Hilfe! Werds demnächst mal testen! Wirklich danke!

    nap



  • Oh man das is mir jetzt echt peinlich das zu sagen aber ich kriegs mit meinem VC++ nicht hin die lib Datei zu erstellen! Es ist keine .mak Datei mitgeliefert - von so einer IDE hab ich auch noch nichts gehört 😞
    Oh man...wo ist denn das in dem Programm ohoh wär nett wenn du mir das noch sagen könntest *schäm*



  • 😉 Hast die Install.doc Anleitung nicht gelesen, hm? Wie gesagt, das Ding ist plattformunabhängig. Es ist aber fast für jedes System und Compiler ein makefile vorhanden. Für VC++ ist sogar eine Projektdatei dabei (*.mak), wie man aus der Install.doc erfährt:

    Zitat:

    "Microsoft Windows, Microsoft Developer Studio:

    We include makefiles that should work as project files in DevStudio 4.2 or
    later. There is a library makefile that builds the IJG library as a static
    Win32 library, and an application makefile that builds the sample applications
    as Win32 console applications. (Even if you only want the library, we
    recommend building the applications so that you can run the self-test.)

    To use:
    1. Copy jconfig.vc to jconfig.h, makelib.ds to jpeg.mak, and
    makeapps.ds to apps.mak. (Note that the renaming is critical!)
    2. Click on the .mak files to construct project workspaces.
    (If you are using DevStudio more recent than 4.2, you'll probably
    get a message saying that the makefiles are being updated.)
    3. Build the library project, then the applications project.
    4. Move the application .exe files from `app`\Release to an
    appropriate location on your path.
    5. To perform the self-test, execute the command line
    NMAKE /f makefile.vc test"

    Nach 3. solltest du die libjepg.lib haben.

    Wenn das "Upgrade" der Projektdatei schiefgehen solle, ist das auch nicht schlimm.
    - Mach ein neues "Win32 Projekt" zu dem bestehenden halb kaputten, wenn vorhanden.
    - In dem Assistenten klickst du unter Additional Settings "static library" an und deactivierst "Precompiled headers".
    - Beende den Assistenten mit Ok.
    - Dann fügst du die 48 Quelldateien aus dem kaputten (oder aus der *.mak Datei) dem neuen Projekt hinzu.
    Das erstellt dann problemlos die Bibliothek.

    Noch zur Erklärung:
    IDE: integrated development environment, das ist die Benutzerobefläche von VC++. Damit meine ich, dass Du nicht "nmake.exe" von der Eingabeaufforderung aus aufrufen mußt, sprich du mußt es nicht von Hand anpassen und kompilieren 😉

    Dann noch einen schönen Abend.



  • lol ich hasse vc++ 😞
    jetzt hab ich die dateien so umbenannt die mak file geöffnet, kompiliere - sehe dass alle .c dateien kompiliert werden und krieg dann am ende
    --------------------Konfiguration: jpeglibi - Win32 Debug--------------------
    Microsoft (R) Program Maintenance-Dienstprogramm: Version 6.00.8168.0
    Copyright (C) Microsoft Corp 1988-1998. Alle Rechte vorbehalten.
    del libjpeg.lib
    C:\Eigene Dateien\Programmieren\jpg jpeg\jpegsr6\jpeg-6b\libjpeg.lib konnte nicht gefunden werden
    NMAKE : fatal error U1077: 'del' : Rueckgabe-Code '0x1'
    Stop.
    Fehler beim Ausführen von NMAKE.

    jpeglib.lib - 1 Fehler, 0 Warnung(en)

    Super!

    Man ich hasse es diese dummen mak files

    was mach ichn da falsch? Sorry aber habe noch nie mak files benutzt

    nap



  • Es scheint, als ob die libjpeg.lib im falschen Verzeichnis liegt 🙄
    PS: Ist wohl nur noch ein VisualStudio/VisualC++ - Problem -> verschoben nach MFC


Anmelden zum Antworten