请问,如何根据一段文字,创建一个底色为黑色,用白色显示文字的bitmap,谢谢 请问,如何根据一段文字,创建一个底色为黑色,用白色显示文字的bitmap,谢谢如:CString str = "Test";根据这个字符串创建一个Bitmap,底色为黑色,文字颜色为白色。谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 创建一个bimap,用黑色填充,然后SetTextColor,然后TextOut 我是这样做的,请看以下代码Size szText;strText = pMark->m_strText;strText.Format(_T("I am Joe"));CMainFrame* pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;CDxWorksView* pView = pFrame->GetCurrentView();CDC* pDC = pView->GetDC();CDC dcDest;szText = pDC->GetTextExtent(strText);dcDest.CreateCompatibleDC(pDC);bmpMark.CreateCompatibleBitmap(pDC, szText.cx, szText.cy);CBitmap* pOldBitmap = (CBitmap*)dcDest.SelectObject(&bmpMark);dcDest.SetBkMode(TRANSPARENT);CBrush brush;brush.CreateSolidBrush(RGB(0, 0, 0));CPen pen(PS_SOLID, 2, RGB(255,255,255));dcDest.FillRect(CRect(0, 0, szText.cx, szText.cy), &brush);CPen* pOldPen = dcDest.SelectObject(&pen);dcDest.SetTextColor(RGB(255, 255, 255)); dcDest.TextOut(0, 0, strText);pDC->BitBlt(0,0,nWidth,nHeight,&dcDest,0,0,SRCCOPY);dcDest.SelectObject(pOldPen);dcDest.SelectObject(pOldBitmap);BITMAP bmpInfol;bmpMark.GetBitmap(&bmpInfol);int nMarkWidth = bmpInfol.bmWidth; // widthint nMarkHeight = bmpInfol.bmHeight; // heightBYTE* pMarkData = new BYTE[nMarkWidth * nMarkHeight * 4];memset(pMarkData, 0x00, nMarkWidth*nMarkHeight*4*sizeof(BYTE));bmpMark.GetBitmapBits(nMarkWidth*nMarkHeight*4*sizeof(BYTE),(BYTE*)pMarkData);int i,j;unsigned short* pImg;for(i=0; i<nMarkHeight; i++){ for(j=0; j<nMarkWidth; j++){pImg = pShortData + (nHeight-1-(ptMarkPos.y+i)) * nWidth + ptMarkPos.x + j;if (pImg == NULL)continue;if(*(pMarkData+i*nMarkWidth*4+j*4) == 0xFF && *(pMarkData+i*nMarkWidth*4+j*4+1) == 0xFF && *(pMarkData+i*nMarkWidth*4+j*4+2) == 0xFF && *(pMarkData+i*nMarkWidth*4+j*4+3) == 0x00){*pImg = 0x0000;//????}}}Bitmap构造成功,但当我准备读取该Bitmap中的数据 文字时 确没有得到任何信息。即不能到达??端点处。 terminateprocess()不能结束进程 关于windows程序的窗口处理过程 无理由散分 判断是哪一个按钮响应的函数MFC 请问:有个位图句柄hbitmap,怎么找到该位图句柄中的位图信息开始位置的指针? 急死小师妹了,怎么得到Oracle数据库中一个数据位为20的数据! 请问那有mfc编程实例和扩展编程实例配书源码下载阿?? 高分向送,简单问题(分不够可以再加)!! 一个新手的问题 如何实现半透明的窗体?请问有谁知道?谢谢! 请教UDP打洞一定能够穿过NAT? 请问我访什么时候删除系统栏里的图标资源
Size szText;
strText = pMark->m_strText;
strText.Format(_T("I am Joe"));
CMainFrame* pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;
CDxWorksView* pView = pFrame->GetCurrentView();
CDC* pDC = pView->GetDC();
CDC dcDest;
szText = pDC->GetTextExtent(strText);
dcDest.CreateCompatibleDC(pDC);
bmpMark.CreateCompatibleBitmap(pDC, szText.cx, szText.cy);
CBitmap* pOldBitmap = (CBitmap*)dcDest.SelectObject(&bmpMark);
dcDest.SetBkMode(TRANSPARENT);
CBrush brush;
brush.CreateSolidBrush(RGB(0, 0, 0));
CPen pen(PS_SOLID, 2, RGB(255,255,255));
dcDest.FillRect(CRect(0, 0, szText.cx, szText.cy), &brush);
CPen* pOldPen = dcDest.SelectObject(&pen);
dcDest.SetTextColor(RGB(255, 255, 255));
dcDest.TextOut(0, 0, strText);
pDC->BitBlt(0,0,nWidth,nHeight,&dcDest,0,0,SRCCOPY);
dcDest.SelectObject(pOldPen);
dcDest.SelectObject(pOldBitmap);BITMAP bmpInfol;
bmpMark.GetBitmap(&bmpInfol);
int nMarkWidth = bmpInfol.bmWidth; // width
int nMarkHeight = bmpInfol.bmHeight; // height
BYTE* pMarkData = new BYTE[nMarkWidth * nMarkHeight * 4];
memset(pMarkData, 0x00, nMarkWidth*nMarkHeight*4*sizeof(BYTE));
bmpMark.GetBitmapBits(nMarkWidth*nMarkHeight*4*sizeof(BYTE),(BYTE*)pMarkData);
int i,j;
unsigned short* pImg;
for(i=0; i<nMarkHeight; i++)
{
for(j=0; j<nMarkWidth; j++)
{
pImg = pShortData + (nHeight-1-(ptMarkPos.y+i)) * nWidth + ptMarkPos.x + j;
if (pImg == NULL)
continue;
if(*(pMarkData+i*nMarkWidth*4+j*4) == 0xFF
&& *(pMarkData+i*nMarkWidth*4+j*4+1) == 0xFF
&& *(pMarkData+i*nMarkWidth*4+j*4+2) == 0xFF
&& *(pMarkData+i*nMarkWidth*4+j*4+3) == 0x00)
{
*pImg = 0x0000;//????
}
}
}Bitmap构造成功,但当我准备读取该Bitmap中的数据 文字时 确没有得到任何信息。即不能到达??端点处。