locked
(C++)在32位图片中显示文字的问题:无法设置字体颜色 RRS feed

  • 问题

  • 我用iimage打开一张png图片,并发到一个位图中:

     

    RECT rc = {0, 0, iWidth, iHeight};

    pBitmapImage->LockBits(&rc, ImageLockModeRead, PIXFMT_32BPP_PARGB, &bmpData);

    m_hBitmap = CreateBitmap(info.Width, info.Height, 1, GetPixelFormatSize(info.PixelFormat), bmpData.Scan0);

    pBitmapImage->UnlockBits(&bmpData);

     

    之后想在这个图片上显示某些文字:

     

    HDC hMemDCBuffer = ::CreateCompatibleDC(hDC);

    ::SelectObject( hMemDCBuffer, m_hBitmap );

    ::SetBkMode( hMemDCBuffer, TRANSPARENT );

    ::SetTextColor( hMemDCBuffer, RGBA(100, 0, 0, 10)); // or RGB(100, 255, 0);

    ::DrawText( hMemDCBuffer, buf, lstrlen( buf ), &rect, DT_VCENTER|DT_CENTER );

     

    不管我设置什么颜色,显示到这个图片上的颜色还是透明的,我该如何设置颜色,才能显示到那个图片中呢?

     

    2010年6月3日 7:50

答案

  • 已经解决了。

    是用CreateBitmap这个方式创建的问题,要用CreateDIBSection创建才行。

     

    • 已标记为答案 Faace 2010年6月23日 9:18
    2010年6月12日 10:11

全部回复

  • 你好,faace

    根据MSDN上的文档:http://msdn.microsoft.com/en-us/library/aa911421.aspx

    DT_VCENTER必须和DT_SINGLELINE联合使用:

    Centers text vertically. You must combine this value with DT_SINGLELINE.

    另外,注意Remark中的内容:

    The DrawText function uses the selected font, text color, and background color for the device context to draw the text. Unless you specify the DT_NOCLIP value, DrawText clips the text so that it does not appear outside the specified rectangle. DrawText assumes that all formatting has multiple lines unless you specify the DT_SINGLELINE format.


    施炯
    2010年6月4日 5:53
    版主
  • 你好,谢谢你的回答。 我加上DT_SINGLELINE了,但是还是一样的, 在32的图片中,已经有显示这些文字,但是却是透明的, 也就是说 把这个32图片显示到屏幕的dc中时,文字的那些地方透底了。
    2010年6月4日 9:04
  • 已经解决了。

    是用CreateBitmap这个方式创建的问题,要用CreateDIBSection创建才行。

     

    • 已标记为答案 Faace 2010年6月23日 9:18
    2010年6月12日 10:11