zoukankan      html  css  js  c++  java
  • Direct2D (6) : 绘制质量(设置抗锯齿模式)


    {相关方法}
    TDirect2DCanvas.RenderTarget.SetAntialiasMode();
    TDirect2DCanvas.RenderTarget.GetAntialiasMode;
    
    {相关常量}
    D2D1_ANTIALIAS_MODE_PER_PRIMITIVE = 0;
    D2D1_ANTIALIAS_MODE_ALIASED       = 1;
    


    测试代码:

    uses Direct2D, D2D1;
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      CheckBox1.Caption := 'D2D1_ANTIALIAS_MODE_PER_PRIMITIVE';
      CheckBox1.Checked := True;
    end;
    
    procedure TForm1.CheckBox1Click(Sender: TObject);
    const
      sArr: array[Boolean] of string = ('D2D1_ANTIALIAS_MODE_PER_PRIMITIVE', 'D2D1_ANTIALIAS_MODE_ALIASED');
    begin
      CheckBox1.Caption := sArr[not CheckBox1.Checked];
      Refresh;
    end;
    
    procedure TForm1.FormPaint(Sender: TObject);
    var
      cvs: TDirect2DCanvas;
      rect: TRect;
    begin
      cvs := TDirect2DCanvas.Create(Canvas, ClientRect);
      cvs.Pen.Color := clRed;
      cvs.Pen.Width := 25;
    
      if CheckBox1.Checked then
        cvs.RenderTarget.SetAntialiasMode(D2D1_ANTIALIAS_MODE_PER_PRIMITIVE)
      else
        cvs.RenderTarget.SetAntialiasMode(D2D1_ANTIALIAS_MODE_ALIASED);
      //cvs.RenderTarget.SetAntialiasMode(Integer(not CheckBox1.Checked)); 可用该行代替上面四行
    
      rect := ClientRect;
      InflateRect(rect, -ClientWidth div 5, -ClientHeight div 5 );
      OffsetRect(rect, 0, 10);
    
      cvs.BeginDraw;
      cvs.Ellipse(rect);
      cvs.EndDraw;
      cvs.Free;
    end;
    
    procedure TForm1.FormResize(Sender: TObject);
    begin
      Repaint;
    end;
    


    效果图:



  • 相关阅读:
    美食小记
    美食小记
    移动端手势的七个事件库
    移动端手势的七个事件库
    利用PS把多张psd格式的图片转换为一张PDF格式
    利用PS把多张psd格式的图片转换为一张PDF格式
    常用的六个富文本编辑器
    常用的六个富文本编辑器
    如何获取公众号里面的歌曲
    快速幂算法
  • 原文地址:https://www.cnblogs.com/del/p/2001673.html
Copyright © 2011-2022 走看看