请问,如何根据一段文字,创建一个底色为黑色,用白色显示文字的bitmap,谢谢
如:CString str = "Test";
根据这个字符串创建一个Bitmap,底色为黑色,文字颜色为白色。谢谢

解决方案 »

  1.   

    创建一个bimap,用黑色填充,然后SetTextColor,然后TextOut
      

  2.   

    我是这样做的,请看以下代码
    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中的数据 文字时 确没有得到任何信息。即不能到达??端点处。