screenshot
-
ich hab da in der msdn nachgeschaut, danke noch mal für den tipp!
aber wenn ich eine andere kompression nehme dann schlägt der speichern plötzlich fehl!
zb.:bmih.biCompression=BI_BITFIELDS;folgende komressionen gibt es:
BI_RGB An uncompressed format.
BI_RLE8 A run-length encoded (RLE) format for bitmaps with 8 bpp. The compression format is a 2-byte format consisting of a count byte followed by a byte containing a color index. For more information, see Bitmap Compression.
BI_RLE4 An RLE format for bitmaps with 4 bpp. The compression format is a 2-byte format consisting of a count byte followed by two word-length color indexes. For more information, see Bitmap Compression.
BI_BITFIELDS Specifies that the bitmap is not compressed and that the color table consists of three DWORD color masks that specify the red, green, and blue components, respectively, of each pixel. This is valid when used with 16- and 32-bpp bitmaps.
BI_JPEG Windows 98/Me, Windows 2000/XP: Indicates that the image is a JPEG image.
BI_PNG Windows 98/Me, Windows 2000/XP: Indicates that the image is a PNG image.zusätzliche wichtige infos:
If biHeight is negative, indicating a top-down DIB, biCompression must be either BI_RGB or BI_BITFIELDS. Top-down DIBs cannot be compressed.Windows 98/Me, Windows 2000/XP: If biCompression is BI_JPEG or BI_PNG, the biHeight member specifies the height of the decompressed JPEG or PNG image file, respectively.
ich will das bild als jpg so unter 500kb bekommen!
thx
-
Ich nehme an, du hast das Bild eben nicht als JPEG gespeichert, sondern ihm einfach nur die Endung .jpg gegeben :p
Angesichts der Qualität würde ich dir aber eh eher PNG empfehlen
-
ok ich hab das so:
char szFilename[]="Bitmap.jpeg"; . . bmih.biCompression=BI_PNG; . .aber error:
C:\screen.cpp(59) : error C2065: 'BI_PNG' : nichtdeklarierter Bezeichnerwas brauch man noch?
-
markoo schrieb:
aber error:
C:\screen.cpp(59) : error C2065: 'BI_PNG' : nichtdeklarierter BezeichnerMein Gott, kannst du denn nicht in den Links nachschauen, die man dir gibt...
-
WebFritzi schrieb:
markoo schrieb:
aber error:
C:\screen.cpp(59) : error C2065: 'BI_PNG' : nichtdeklarierter BezeichnerMein Gott, kannst du denn nicht in den Links nachschauen, die man dir gibt...
tut mir leid webfritzi, vielleicht hab ich was überlesen....hab bisher nur das gesehn:
Windows 98/Me, Windows 2000/XP: If biCompression is BI_JPEG or BI_PNG, the biHeight member specifies the height of the decompressed JPEG or PNG image file, respectively
naja ich lies noch mal alles durch...
thx
-
Das biCompression-Member im BITMAPINFOHEADER gibt doch nur an, wie du die Daten in der Struktur speicherst - nicht, wie die Daten gespeichert werden. flenders hat dir einen Link gegeben. Geh diesem nach.
Und noch einmal zu deinem eigentlichen Vorhaben: In den FAQs (http://www.c-plusplus.net/forum/viewtopic.php?t=39400) hast du eine Funktion zum Abspeichern eines DCs. Das DC zum gesamten Bildschirm holst du dir mit GetWindowDC(NULL). Das kannste dann als Parameter in die Funktion einsetzen. Fertig.
-
WebFritzi schrieb:
Das biCompression-Member im BITMAPINFOHEADER gibt doch nur an, wie du die Daten in der Struktur speicherst - nicht, wie die Daten gespeichert werden. flenders hat dir einen Link gegeben. Geh diesem nach.
Und noch einmal zu deinem eigentlichen Vorhaben: In den FAQs (http://www.c-plusplus.net/forum/viewtopic.php?t=39400) hast du eine Funktion zum Abspeichern eines DCs. Das DC zum gesamten Bildschirm holst du dir mit GetWindowDC(NULL). Das kannste dann als Parameter in die Funktion einsetzen. Fertig.
hi webdritzi! das speichern klappt ja ansich wohl...aber halt nicht kompremiert, glaub hast mich bissi falsch verstanden...
libpng is the official PNG reference library...
ich versuch das mal mit #include "zlib.h"
mal schaun ob das nun geht..thx

-
Es ging eher darum: Image::Save Method
-
speichern?
aber was hat das mit dem error zu tun...es sieht aus als ob eine lib fehlt...oder meinst du das:
// Create an Image object based on a PNG file. Image image(L"Mosaic.png");als .png saven? bin glaub ich jetzt am falschen draht...*g* help!
thx
-
Imho, müsstest du - selbst wenn der BI_PNG-Fehler nicht kommen würde - das Bild dann selber 'händisch' komprimieren, das passiert dann nicht automatisch!
Die Methode unter flender's link ist da viiiieeeel einfacher - Du musst nicht selber komprimieren und nicht mit CreateFile() rumhampeln, etc...
und du könntest das sehr schnell auf z.B. jpeg umändern!
-
geeky schrieb:
Imho, müsstest du - selbst wenn der BI_PNG-Fehler nicht kommen würde - das Bild dann selber 'händisch' komprimieren, das passiert dann nicht automatisch!
Die Methode unter flender's link ist da viiiieeeel einfacher - Du musst nicht selber komprimieren und nicht mit CreateFile() rumhampeln, etc...
und du könntest das sehr schnell auf z.B. jpeg umändern!ach so....ich dachte das geht automatisch!!! bitte hilft mir mal
ich versuchs mal so zu machen:
int dc2bitmap(HDC hdc, int width, int height, char *filename) { Graphics graphics(hdc); // Create an Image object based on a PNG file. Image image(L+filename); // Draw the image. graphics.DrawImage(&image, width, height); // Construct a Graphics object based on the image. Graphics imageGraphics(&image); // Alter the image. SolidBrush brush(Color(255, 0, 0, 255)); imageGraphics.FillEllipse(&brush, 20, 30, 80, 50); // Draw the altered image. graphics.DrawImage(&image, 200, 10); // Save the altered image. CLSID pngClsid; GetEncoderClsid(L"image/png", &pngClsid); image.Save(L+filename, &pngClsid, NULL); }ich bekomme einige error:
zb.: error C2065: 'Graphics' : nichtdeklarierter Bezeichnerdiese Header braucht man: Gdiplusheaders.h, include gdiplus.h
aber ich kann die nicht finden!????
library hab ich nicht: gdiplus.libbitte um answere!
thx

-
markoo schrieb:
library hab ich nicht: gdiplus.lib
Na, woher wird deine Fehlermeldung dann wohl kommen? Ich verlinke dich auf die Seite, auf der du die gdiplus.dll bekommst.
EDIT: Das Geile ist: die von MS meinen zwar, man hätte standardmäßig diese DLL in WinXP dabei - ich habe sie nicht!
-
WebFritzi schrieb:
markoo schrieb:
library hab ich nicht: gdiplus.lib
Na, woher wird deine Fehlermeldung dann wohl kommen? Ich verlinke dich auf die Seite, auf der du die gdiplus.dll bekommst.
EDIT: Das Geile ist: die von MS meinen zwar, man hätte standardmäßig diese DLL in WinXP dabei - ich habe sie nicht!
webfritzi...gesagt, getan: aber nicht erfolgreich!! das öffnen der dll ist erfolgreich...... hmmmmmm versteh das nicht!!!!!!!!!!! wäre um einen weiteren ratschlag sehr dankbar!
thx

// gdiplus.dll laden: HINSTANCE hLib = LoadLibrary("gdiplus.dll"); if(hLib == NULL) { MessageBox(NULL,"Fehler: gdiplus.DLL konnte nicht geladen werden !","error", 0); return 0; } // Aufräumen: FreeLibrary(hLib);errors sind wieder gleich:
zb.:
screen.cpp(138) : error C2065: 'Graphics' : nichtdeklarierter Bezeichner
-
Hallo,
die gdiplus.dll ist, wie von MS behauptet, bei XP dabei. Sie befindet sich in einem der side-by-side(C:\Windows\WinSxS)-Verzeichnisse (neuere Anwendungen sollen ihre DLLs in diese Verzeichnisse platzieren, um Versionsprobleme zu vermeiden, Stichwort: DLL Hell..., deswegen relativ schwer zu finden)
@markoo:
du hast oben schon geschrieben, daß dir die Header-Dateien (Gdiplusheaders.h, gdiplus.h) fehlen, deswegen kann das so nichts werden. Diese Header bekommst du z.B. durch eine Aktualisierung des Platform SDK hier:
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
MfG
-
Probe-Nutzer schrieb:
Hallo,
du hast oben schon geschrieben, daß dir die Header-Dateien (Gdiplusheaders.h, gdiplus.h) fehlen, deswegen kann das so nichts werden. Diese Header bekommst du z.B. durch eine Aktualisierung des Platform SDK hier:http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
MfG
vielen dank probe-nutzer!!! das gesamte update ist so bei 200mb....das ist relativ viel!
was brauch ich da alles:
1.) Internet Development SDK (Version 6.0)
2.) Internet Information Server SDK (Version 5.1)
3.) Windows Installer SDK (Version 2.0)
4.) WMI SDKmir sagn die sachn nicht viel!!! thx

-
es reicht das "Core SDK", wenn du das anklickst, dann siehst du schon in der Beschreibung der Komponenten "Graphics (GDI, GDI+, ICM, OpenGL, WIA, Windows Media
)", also genau das, was du brauchst. Du mußt es nach dem Herunterladen noch richtig einbinden, also beachte alle Installations-Hinweise, die du dort nachlesen kannstMfG
-
Probe-Nutzer schrieb:
es reicht das "Core SDK", wenn du das anklickst, dann siehst du schon in der Beschreibung der Komponenten "Graphics (GDI, GDI+, ICM, OpenGL, WIA, Windows Media
)", also genau das, was du brauchst. Du mußt es nach dem Herunterladen noch richtig einbinden, also beachte alle Installations-Hinweise, die du dort nachlesen kannstMfG
vielen dank probe nutzer!!
schau mal:Core SDK (Windows Server 2003)
201.7 MB / Download Time: 8 hr 11 min / Updated: February 2003
(Build 5.2.3790.0) Read This First
Build environment (31 MB)
Build environment (Intel 64-bit) (67.6 MB)
Documentation (release and prerelease) (91.6 MB)
Sample and source code (10.6 MB)--------------------------------------------------------------------------------
Update Dependencies
The SDKs you have selected require the following components, which will also be installed.
Windows Installer Control
40 KB / Download Time: < 1 min / Updated: Tuesday, April 01, 2003
Performs the installation of Windows Installer files on your computer. (Build 5.2.3790.0)
Installation Control (40 KB)Common Setup Files
11.7 MB / Download Time: 1 hr 18 min / Updated: February 2003
(Build 5.2.3790.0)
Common Setup Files (11.7 MB)Download size: 179.4 MB
179mb stimmt das? hmmm...
thx

-
Build environment (Intel 64-bit) (67.6 MB)
Documentation (release and prerelease) (91.6 MB)das brauch ich e nicht....hab keinen 64 bit prozessor!!
thx

-
hab sdk erfolgreich installiert:
und in projekt die libs eingebunden:
#include "C:\Programme\Microsoft SDK\include\gdiplusheaders.h"
#include "C:\Programme\Microsoft SDK\include\gdiplus.h"aber 102 error:
c:\programme\microsoft sdk\include\gdiplusheaders.h(23) : error C2504: 'GdiplusBase' : Basisklasse undefiniert
c:\programme\microsoft sdk\include\gdiplusheaders.h(28) : error C2629: 'class Region (' unerwartet
c:\programme\microsoft sdk\include\gdiplusheaders.h(28) : error C2238: Unerwartete(s) Token vor ';'
c:\programme\microsoft sdk\include\gdiplusheaders.h(29) : error C2629: 'class Region (' unerwartet
c:\programme\microsoft sdk\include\gdiplusheaders.h(29) : error C2238: Unerwartete(s) Token vor ';'
c:\programme\microsoft sdk\include\gdiplusheaders.h(30) : error C2629: 'class Region (' unerwartet
c:\programme\microsoft sdk\include\gdiplusheaders.h(30) : error C2238: Unerwartete(s) Token vor ';'
c:\programme\microsoft sdk\include\gdiplusheaders.h(38) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'MakeInfinite'
c:\programme\microsoft sdk\include\gdiplusheaders.h(38) : error C2501: 'Status' : Fehlende Speicherklasse oder Typbezeichner
c:\programme\microsoft sdk\include\gdiplusheaders.h(39) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'MakeEmpty'
c:\programme\microsoft sdk\include\gdiplusheaders.h(39) : error C2501: 'Status' : Fehlende Speicherklasse oder Typbezeichnerversteh das nimma;-(
thx

-
Gdiplusheaders.h, include gdiplus.h
Also sollst du nicht direkt Gdiplusheaders.h einbinden, sondern nur gdiplus.h

Außerdem solltest du die Pfade zum SDK (wenn das bei dir nicht automatisch bzw. über eine Verknüpfung gemacht wurde) unter Extras > Optionen > Verzeichnisse (Include-Dateien / Bibliothekdateien) eintragen (an erster Stelle) - dann brauchst du beim include auch nicht mehr den kompletten Pfad angeben
