Dies ist mein erster Beitrag hier. Ich habe ein Problem. Ich muss einen Screenshot des Desktops machen, ihn in JPEG konvertieren, in einem Puffer speichern und dann manipulieren und über das Internet senden.Holen Sie sich die Größe von JPEG aus dem Speicher (konvertiert mit GDI ++)
Ich habe den Code dafür mit GetDC .... und GDI + für die Umwandlung der HBITMAP in JPEG geschrieben. Das Problem, das ich jetzt habe, ist, dass ich die Größe der JPEG nicht kenne, die in IStream gespeichert worden ist. Hier ist ein Teil des Codes, der die von der HBITMAP hBackBitmap referenzierte Bitmap in jpeg transformiert und in pStream speichert. Ich muss wissen, wie viele Bytes in pStream geschrieben wurden und wie ich pStream verwenden können (eine PVOID Griff bekommen):
Gdiplus::Bitmap bitmap(hBackBitmap, NULL);///loading the HBITMAP
CLSID clsid;
GetEncoderClsid(L"image/jpeg", &clsid);
HGLOBAL hGlobal = GlobalAlloc(GMEM_FIXED, nBlockSize) ;//allocating memory, the size of the current bitmap size. i'm over allocating but i don't think there is any way to get the exact ammount I need to allocate, is there?
if(!hGlobal)
return;
IStream* pStream = NULL ;
if(CreateStreamOnHGlobal(hGlobal, TRUE, &pStream) != S_OK)
return;
bitmap.Save(pStream, &clsid);
Was ich brauche, ist: 1. die Größe der JPEG-Finden Sie heraus, wie viele Bytes wurden in den Stream geschrieben 2. Wie verwendet man den Stream. Kann ich beispielsweise eine PVOID für die Daten im Stream erhalten?
Vielen Dank.
Vielen Dank. Dies ist eine gute Lösung, da ich keinen zusätzlichen Speicher für den Stream reservieren muss. – Nemok