2015-07-13 4 views
0

Я использую 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(); 
} 

ответ

0

Постарайся вызова ID2D1Brush :: SetOpacity на щетке, со значением от 0,0 до 1,0 в зависимости от того, насколько прозрачна вы хотите строку:

DelphiInterface<ID2D1Brush> pBrush = // ... 
pBrush->SetOpacity(0.5); 
+0

Установка кистью-> 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

+0

Извините, я знаком с Direct2D, но не с используемой оболочкой TDirect2DCanvas. Однако я знаю, что установка непрозрачности на кисти влияет на рисование линии, если вы используете ID2D1RenderTarget :: DrawLine. Если оболочка позволяет вам использовать базовый объект ID2D1RenderTarget, вы можете использовать его метод DrawLine для получения желаемого эффекта. – user1610015

+0

Вот ответ. Объект TDirect2DPen имеет собственное свойство Brush. Когда вы создаете Brush, вы можете назначить его непосредственно TDirect2DPen.Brush.Handle = TDirect2DPen.Brush. Я не знал, что у пера есть свое свойство кисти. Когда кисть создается с помощью SetOpacity (0.5), линия прозрачна. – homebase

 Смежные вопросы

  • Нет связанных вопросов^_^