Я использую C++ Builder XE4 с платформой окон VCL, и я использую оболочку TDirect2DCanvas для доступа к функциям Direct2D. Я портирую код GDI + на Direct2D, и я зациклился на том, как рисовать прозрачную строку в Direct2D. Когда я говорю прозрачно, я берусь за линию с некоторым типом альфа-смеси или прозрачной настройки, чтобы можно было увидеть изображение под линией. В приведенном ниже коде создается кисть градиента Direct2D и рисуется линия на цели рендеринга Direct2D, но отсутствует прозрачность. Можете ли вы показать, как настроить кисть и/или ручку, чтобы линия рисовала прозрачно. Благодарякак рисовать прозрачную линию Direct2D в C++ Builder
// 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();
}
Установка кистью-> SetOpacity (0.5) только похоже, создает объекты заполнения, такие как многоугольник. Кажется, что это не влияет на Pen, поэтому рисование широкой линии непрозрачно. Есть ли способ установить непрозрачность пера в Direct2D? Этот код работает, но перо не прозрачно Canvas-> Pen-> Width = 15; Canvas-> Pen-> Color = clRed; DelphiInterface pRedBrush = Canvas-> CreateBrush (clRed); pRedBrush-> SetOpacity (0,5); Холст-> Кисть-> Ручка = pRedBrush; Холст-> Кисть-> Стиль = bsSolid; Canvas-> MoveTo (x, y); Canvas-> LineTo (x, y); –
homebase
Извините, я знаком с Direct2D, но не с используемой оболочкой TDirect2DCanvas. Однако я знаю, что установка непрозрачности на кисти влияет на рисование линии, если вы используете ID2D1RenderTarget :: DrawLine. Если оболочка позволяет вам использовать базовый объект ID2D1RenderTarget, вы можете использовать его метод DrawLine для получения желаемого эффекта. – user1610015
Вот ответ. Объект TDirect2DPen имеет собственное свойство Brush. Когда вы создаете Brush, вы можете назначить его непосредственно TDirect2DPen.Brush.Handle = TDirect2DPen.Brush. Я не знал, что у пера есть свое свойство кисти. Когда кисть создается с помощью SetOpacity (0.5), линия прозрачна. – homebase