Ich arbeite an einer Bildschirmaufnahme-Methode für mein Programm. Bei jeder Bildschirmaufnahme versuche ich, das Bild basierend auf der DateTime auf die Sekunde zu benennen. Im Moment würde alles wie screen.jpg heißen.C++: Konvertieren von DateTime als Dateiname
Wie kann ich "Bildschirm" auf die aktuelle DateTime ändern?
Ich habe versucht, mit der Zeile, die es nennt, herumspielen, aber ich bekomme immer Fehler wie "Ausdruck muss integral oder uncoped Enum-Typ haben." Ich bin mir nicht sicher, was das bedeutet.
void BitmapToJpg(HBITMAP hbmpImage, int width, int height)
{
time_t now = time(0);
char* dt = ctime(&now);
Bitmap *p_bmp = Bitmap::FromHBITMAP(hbmpImage, NULL);
//Bitmap *p_bmp = new Bitmap(width, height, PixelFormat32bppARGB);
CLSID pngClsid;
int result = GetEncoderClsid(L"image/jpeg", &pngClsid);
if (result != -1)
std::cout << "Encoder succeeded" << std::endl;
else
std::cout << "Encoder failed" << std::endl;
p_bmp->Save(L"screen_.jpg", &pngClsid, NULL);
delete p_bmp;
}
UPDATE:
Diese Version hat mir nicht gegeben Fehler, so dass ich werde versuchen, es zu benutzen. Ich werde diesen Beitrag aktualisieren, um zu überprüfen, ob er ordnungsgemäß funktioniert oder nicht, wenn mein Programm versucht, es zu verwenden! :)
Revised Code:
void BitmapToJpg(HBITMAP hbmpImage, int width, int height)
{
time_t now = time(0);
char* dt = ctime(&now);
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
std::wstring wide = converter.from_bytes(dt);
Bitmap *p_bmp = Bitmap::FromHBITMAP(hbmpImage, NULL);
//Bitmap *p_bmp = new Bitmap(width, height, PixelFormat32bppARGB);
CLSID pngClsid;
int result = GetEncoderClsid(L"image/jpeg", &pngClsid);
if (result != -1)
std::cout << "Encoder succeeded" << std::endl;
else
std::cout << "Encoder failed" << std::endl;
std::wstring fileName = std::wstring(L"screen_") + wide + (L".jpg");
p_bmp->Save(fileName.c_str(), &pngClsid, NULL);
delete p_bmp;
}
Haben Sie versucht, dieses Datum in eine Zeichenfolge umzuwandeln? – wdc
Da die Save-Methode eine breite Zeichenfolge akzeptiert, müssen Sie char * dt in wstring konvertieren: https://stackoverflow.com/questions/2573834/c-convert-string-or-char-to-wstring-or-wchar- t und dann verketten Sie das Ergebnis einfach mit der Dateinamenerweiterung. – Dom
std :: time (0) "ist fast immer ein ganzzahliger Wert, der die Anzahl der Sekunden (ohne Schaltsekunden) seit 00:00, 1. Jan. 1970 UTC, entsprechend der POSIX-Zeit, enthält" Also für eine einmalige (pro Sekunde) Datei Name, könnten Sie in Betracht ziehen, an "image /" die POSIX-Zeit "std :: to_string (std :: time (0))" und dann vielleicht "/ jpeg" anzuhängen? –