GetFrameSize(); CameraFrameBuffer = (unsign-6ren">
gpt4 book ai didi

c++ - 没有 "visible"DC 的 HBITMAP 上的 DrawText?

转载 作者:行者123 更新时间:2023-11-28 05:08:03 25 4
gpt4 key购买 nike

我需要在网络摄像头框架上打印时间戳并尝试下一步:

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 是:

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 );
}

保存测试图像文件(字符串 CameraFrame)时,我得到的只是一个没有文本的框架...

相机在后台拍摄,屏幕上没有任何显示,所以我不确定我选择的是 HDC。

一般来说,我有一个 RGB 图像缓冲区,其中必须放置具有透明度的文本。如何实现?

最佳答案

看起来您正在压缩(和保存)原始相机帧缓冲区 buf,而不是位图缓冲区。 CreateDIBSection 的用法也是错误的,因为参数 #4 是一个输出参数,它应该接收指向 DIB 位值位置的指针,而您正试图传递一个指向现有图像数据的指针那里。

关于c++ - 没有 "visible"DC 的 HBITMAP 上的 DrawText?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44203815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com