功能相当于在图片上加水印。所加的文字要求任意输入字符串、字体可变、字号可调,这个任务要求在控制台上实现。还不允许用OpenCV,因此其中的cvPutText()也不能用了。我现利用兼容DC在MFC上用TextOut()倒是实现了,可是必须把要加载的文字在屏幕窗口上显示出来后才行,这样不能移植到后台运行。
大侠指点一下,能否不显示也能实现呢?跪求了~谢谢下面是我现在的笨方法,相当于在屏幕显示文字然后截屏处理,看看怎么改可以不显示出来在内存内完成处理呢?多提宝贵建议
CDC *m_pmemDC= AfxGetMainWnd()-> GetDC();
HDC hScrDC, hMemDC;
hMemDC = CreateCompatibleDC(NULL);
int twidth, theight,startX,startY;
startX = 0;
startY = 0;
twidth = 700; //字符绘图区域长度
theight = 60; //字符绘图区域宽度
CFont font;
font.CreatePointFont(300,font_type,0);
m_pmemDC->SelectObject(&font);CString str=_T("WWW.ABCDEFG.COM");
str+=" ";
CPen pen;
pen.CreatePen(0,20,RGB(0,0,0));
m_pmemDC->SelectObject(&pen);
m_pmemDC->SetTextColor(RGB(5,5,5));
m_pmemDC->TextOutW(0,0,str);
RGBQUAD *lpBitRGB = NULL;
hScrDC = m_pmemDC->GetSafeHdc();
hMemDC = CreateCompatibleDC(hScrDC);
BITMAPINFO RGB16BitsBITMAPINFO;
ZeroMemory(&RGB16BitsBITMAPINFO, sizeof(BITMAPINFO));
RGB16BitsBITMAPINFO.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
RGB16BitsBITMAPINFO.bmiHeader.biWidth = twidth;
RGB16BitsBITMAPINFO.bmiHeader.biHeight = theight;
RGB16BitsBITMAPINFO.bmiHeader.biPlanes = 1;
RGB16BitsBITMAPINFO.bmiHeader.biBitCount = 32;
BITMAP directBmp = CreateDIBSection(hMemDC,(BITMAPINFO*) &RGB16BitsBITMAPINFO,DIB_RGB_COLORS,(void **)&lpBitRGB,NULL,0);
HGDIOBJ previousObject = SelectObject(hMemDC, directBmp);
BitBlt(hMemDC, 0, 0, twidth, theight, hScrDC, startX, startY, SRCCOPY);
大侠指点一下,能否不显示也能实现呢?跪求了~谢谢下面是我现在的笨方法,相当于在屏幕显示文字然后截屏处理,看看怎么改可以不显示出来在内存内完成处理呢?多提宝贵建议
CDC *m_pmemDC= AfxGetMainWnd()-> GetDC();
HDC hScrDC, hMemDC;
hMemDC = CreateCompatibleDC(NULL);
int twidth, theight,startX,startY;
startX = 0;
startY = 0;
twidth = 700; //字符绘图区域长度
theight = 60; //字符绘图区域宽度
CFont font;
font.CreatePointFont(300,font_type,0);
m_pmemDC->SelectObject(&font);CString str=_T("WWW.ABCDEFG.COM");
str+=" ";
CPen pen;
pen.CreatePen(0,20,RGB(0,0,0));
m_pmemDC->SelectObject(&pen);
m_pmemDC->SetTextColor(RGB(5,5,5));
m_pmemDC->TextOutW(0,0,str);
RGBQUAD *lpBitRGB = NULL;
hScrDC = m_pmemDC->GetSafeHdc();
hMemDC = CreateCompatibleDC(hScrDC);
BITMAPINFO RGB16BitsBITMAPINFO;
ZeroMemory(&RGB16BitsBITMAPINFO, sizeof(BITMAPINFO));
RGB16BitsBITMAPINFO.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
RGB16BitsBITMAPINFO.bmiHeader.biWidth = twidth;
RGB16BitsBITMAPINFO.bmiHeader.biHeight = theight;
RGB16BitsBITMAPINFO.bmiHeader.biPlanes = 1;
RGB16BitsBITMAPINFO.bmiHeader.biBitCount = 32;
BITMAP directBmp = CreateDIBSection(hMemDC,(BITMAPINFO*) &RGB16BitsBITMAPINFO,DIB_RGB_COLORS,(void **)&lpBitRGB,NULL,0);
HGDIOBJ previousObject = SelectObject(hMemDC, directBmp);
BitBlt(hMemDC, 0, 0, twidth, theight, hScrDC, startX, startY, SRCCOPY);
尽量用主线程调用!