COLORREF和D2D1 :: ColorF之间的转换

时间:2014-08-11 11:18:24

标签: c++ mfc gdi+ direct2d

在我的Windows桌面应用程序开发中,GDI +和Direct2D都用于绘制矩形,线条,椭圆等。如何将COLORREF(用于GDI +用于画笔)转换为D2D1 :: ColorF(用于Direct2D)对于画笔)反之亦然?

代码示例:

GDI + 中,为了填充具有特定颜色的矩形,

PAINTSTRUCT ps;
HDC hdc;

hdc = BeginPaint(hWnd, &ps);
HBRUSH brush;

brush = ::CreateSolidBrush(*pColor);    //COLORREF* pColor;

::FillRect(hdc, &ps.rcPaint, brush);
::DeleteObject((HGDIOBJ) brush);

EndPaint(hWnd, &ps);

Direct2D 中,绘制具有特定颜色的椭圆,

pRenderTarget->BeginDraw(); 

//type ID2D1SolidColorBrush - alpha value (4th parameter) is omitted
brush->SetColor(D2D1::ColorF(0.5f,0.5f,0.5f));

const D2D1_ELLIPSE circle1 = D2D1::Ellipse(
              D2D1::Point2F(pt1, pt2, 3.0f, 1.0f);

pRenderTarget->DrawEllipse(circle1, brush);

pRenderTarget->EndDraw();

1 个答案:

答案 0 :(得分:1)

两者都由三种颜色成分构成:R,G,B。

ColorF::ColorF

ColorF(FLOAT, FLOAT, FLOAT, FLOAT)(
  FLOAT r,
  FLOAT g,
  FLOAT b,
  FLOAT a = 1.0
);

COLORREF

  

要创建COLORREF颜色值,请使用RGB宏。要提取颜色值的红色,绿色和蓝色组件的各个值,请分别使用GetRValue,GetGValue和GetBValue宏。

COLORREF RGB(
  BYTE byRed,
  BYTE byGreen,
  BYTE byBlue
);

具体来说,您可以使用GetRValueGetGValueGetBValue宏从COLORREF获取单个组件,然后在ColorF构造函数中使用它们。