(MFC mit dem...) Bitmaps als JPG abspeichern?
-
versteh das nicht, nahezu jedes Programm unterstützt jpg/jpeg aber es scheint doch ziemlich schwer zu sein es in sein eigenes einzubauen - gibts da keine dlls/libs mit guter docu?
-
Es wurden doch schon viele Hinweise und Links gegebenen.
MSPaint wird es ziemlich sicher mit OleLoadPicture machen.
Photoshop, Irfanview u.ä. haben ihre eigenen Routinen zum Speichern (IMHO).
Einfache, selbstprogrammierte Programme verwenden in der Regel auch OleLoadPicture oder eben sowas wie openil.sourceforge.net .Lad dir das doch einfach mal runter, lies dir die doku durch und benutz es.
[ Dieser Beitrag wurde am 29.04.2003 um 19:48 Uhr von cd9000 editiert. ]
-
Hmm ich benutze nur ungern fremde libs - hat wer ein Beispiel für OleLoadPicture? wenn nich muss ich mich wohl an openil wagen
Wäre spitze
nap
-
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
-
Ah ja, und IPicture::SaveAsFile
-
@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ßenEtwas 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 kompilierenDann 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