我在VCL windows平台上使用C++Builder XE4,我使用包装器TDirect2DCanvas访问Direct2D函数。我正在将GDI+代码移植到Direct2D上,并且我一直在研究如何在Direct2D中绘制一条透明的线。当我说“透明”的时候,我用的是一条带有α混合或透明设置的线,这样就可以看到线下的图像了。下面的代码创建一个Direct2D梯度刷,并在Direct2D呈现目标上绘制一条线,但没有透明度。你能展示如何设置刷子和/或钢笔,使线条绘制透明。谢谢
// begin drawing
Canvas2D_->BeginDraw();
try
{
TColor clrs[] = {clRed, clLime};
// create a gradient brush
DelphiInterface<ID2D1Brush> pBrush =
Canvas->CreateBrush(clrs, 1,
D2D1::Point2F(-w/2, -h/2),
D2D1::Point2F(w/2, h/2));
Canvas->Brush->Handle = pBrush;
Canvas->Pen->Width = 10;
int x=25;
Canvas->MoveTo(x, -half_h);
Canvas->LineTo(x, half_h);
}
__finally
{
// end drawing (actual screen update)
Canvas2D_->EndDraw();
}
发布于 2015-07-13 17:51:42
尝试在画笔上调用ID2D1Brush::SetOpacity,其值在0.0到1.0之间,这取决于您希望行的透明程度:
DelphiInterface<ID2D1Brush> pBrush = // ...
pBrush->SetOpacity(0.5);
https://stackoverflow.com/questions/31394780
复制