в разделе Антиалиасинг обсуждалось присвоение свойству Quality формы HighQuality и рисование на канве.
если рисовать сразу к примеру в PaintBox или на канву формы, то это работает.
по опыту GDI, стандартно отрисовывают буфер, а уже его копируют на канву визуальных компонентов.
по коду, буфер:
bmp_buf = new TBitmap();bmp_buf->Width = window_rect.Width();
bmp_buf->Height = window_rect.Height();
рисование:
TPathData *pd = new TPathData;
pd->MoveTo( Point( 100, 100 ) );
pd->LineTo( Point( 150, 100 ) );
pd->LineTo( Point( 100, 150 ) );
bmp_buf->Canvas->Stroke->Thickness = 5;
bmp_buf->Canvas->Stroke->Kind = TBrushKind::Solid;
bmp_buf->Canvas->Stroke->Dash = TStrokeDash::Solid;
bmp_buf->Canvas->Stroke->Color = (TAlphaColor)TAlphaColorRec::Black;
bmp_buf->Canvas->DrawPath( pd, 1 );
delete pd;
на OnPaint копирование буфера:
pbMap->Canvas->BeginScene();pbMap->Canvas->DrawBitmap( bmp_buf, bmp_rect, window_rect, 1, false );
pbMap->Canvas->EndScene();
в результате все быстро, без морганий, но антиалиасинга нет.
у канвы буфера bmp_buf есть свойство Quality:
__property TCanvasQuality Quality = {read=FQuality, nodefault}; - только чтение
принимает значения:
enum class DECLSPEC_DENUM TCanvasQuality : unsigned int { ccSystemDefault, ccHighPerformance, ccHighQuality };
по умолчанию ccSystemDefault
вот как бы и вопрос, как создать буферный TBitmap с TCanvas, у которого Quality == ccHighQuality?
возможно есть другие варианты рисовать ломаные линии с антиалиасинг?