Ich brauche einen Zeitstempel auf Webcam Rahmen zu drucken und versucht als nächstes zu tun:DrawText auf HBITMAP ohne "sichtbares" DC?
CameraFrameBufferSize = WebCam->GetFrameSize();
CameraFrameBuffer = (unsigned char *)realloc(CameraFrameBuffer, CameraFrameBufferSize);
unsigned char * buf = WebCam->CaptureFrame(); // returns pointer to RGB buffer of frame
HDC hDC = CreateCompatibleDC(NULL);
HFONT font = CreateFont(20, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE, RUSSIAN_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, VARIABLE_PITCH, "times");
RECT rect;
rect.left = 0;
rect.right = WebCam->GetFrameWidth();
rect.top = 10;
rect.bottom = 50;
HBITMAP hBitmap = CreateHBITMAPfromByteArray(hDC, WebCam->GetFrameWidth(), WebCam->GetFrameHeight(), 3, buf);
SelectObject(hDC, hBitmap);
SelectObject(hDC, font);
SetBkMode(hDC, TRANSPARENT);
SetTextColor(hDC, RGB(255,255,255));
string Text = GetTime("%Y.%m.%d %H:%M:%S");
DrawTextA(hDC, Text.c_str(), Text.size(), &rect, DT_CENTER | DT_WORDBREAK);
jpge::compress_image_to_jpeg_file_in_memory(CameraFrameBuffer, CameraFrameBufferSize, WebCam->GetFrameWidth() ,WebCam->GetFrameHeight(), 3, buf, CameraCompressor);
CameraFrame = string(reinterpret_cast<char*>(CameraFrameBuffer), CameraFrameBufferSize);
ReleaseDC(NULL, hDC);
DeleteObject(hBitmap);
DeleteObject(font);
CreateHBITMAPfromByteArray ist:
HBITMAP CreateHBITMAPfromByteArray(HDC hdc, int Width, int Height, int Colors, unsigned char* pImageData){
LPBITMAPINFO lpbi = new BITMAPINFO;
lpbi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
lpbi->bmiHeader.biWidth = Width;
lpbi->bmiHeader.biHeight = -Height;
lpbi->bmiHeader.biPlanes = 1;
lpbi->bmiHeader.biBitCount = Colors*8;
lpbi->bmiHeader.biCompression = BI_RGB;
lpbi->bmiHeader.biSizeImage = 0;
lpbi->bmiHeader.biXPelsPerMeter = 0;
lpbi->bmiHeader.biYPelsPerMeter = 0;
lpbi->bmiHeader.biClrUsed = 0;
lpbi->bmiHeader.biClrImportant = 0;
return CreateDIBSection(hdc, lpbi, DIB_RGB_COLORS,(void **)&pImageData,NULL,0);
}
Und ich bin immer nur einen Rahmen ohne Text, wenn ein Testbild-Datei speichern (string CameraFrame) ...
Die Kamera schießt im Hintergrund und nichts wird auf dem Bildschirm angezeigt, also bin ich mir nicht sicher über HDC, die ich auswähle.
Im Allgemeinen habe ich einen RGB-Puffer von Bild, wo der Text mit Transparenz platziert werden muss. Wie implementiert man das?
Ja, ich habe CreateDIBSection falsch verwendet. Vielen Dank. – Iceman