功能相当于在图片上加水印。所加的文字要求任意输入字符串、字体可变、字号可调,这个任务要求在控制台上实现。还不允许用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);