【问题标题】:Set Canvas origin to lower-left corner in Skia在 Skia 中将 Canvas 原点设置为左下角
【发布时间】:2019-05-21 19:53:30
【问题描述】:

如何将画布的原点设置为左下角而不是左上角?

void draw(SkCanvas* canvas) {
  SkPaint p;
  p.setColor(SK_ColorRED);
  p.setAntiAlias(true);
  p.setStyle(SkPaint::kStroke_Style);
  p.setStrokeWidth(10);

  canvas->drawLine(200, 20, 100, 100, p);
}

https://fiddle.skia.org/c/e5fe08a701838b078c0ec6c98ef052c8

【问题讨论】:

  • 这真的是 C# 代码吗(因为它被标记为 c#)?在我看来更像 C 或 C++。
  • 使用 Scale(1, -1) 反转 Y 轴,Translate(0, height) 移动原点。
  • 不要使用画布->scale(1, -1);这会将文本颠倒过来。为了在skia中反转y轴,我找不到比手动为每个y坐标添加负号更好的方法。

标签: c# skiasharp skia


【解决方案1】:

虽然我不相信您可以更改原点,但您可以使用画布的边界来获得所需的点。

void draw(SkCanvas* canvas) {
    SkPaint p;
    p.setColor(SK_ColorRED);
    p.setAntiAlias(true);
    p.setStyle(SkPaint::kStroke_Style);
    p.setStrokeWidth(10);
    SkRect bounds = canvas->getLocalClipBounds();
    canvas->drawLine(bounds.fLeft + 200, bounds.fBottom - 20, bounds.fLeft + 100, bounds.fBottom - 100, p);
}

【讨论】:

    【解决方案2】:

    你可以从画布中得到高度和宽度,然后减去它,我们可以得到绘图看起来像原点改变到左下角。

    试试这个代码

    void draw(SkCanvas* canvas) {
        SkPaint p;
    
        p.setColor(SK_ColorRED);
        p.setAntiAlias(true);
        p.setStyle(SkPaint::kStroke_Style);
        p.setStrokeWidth(10);
    
        canvas->drawLine(200, canvas->getDeviceClipBounds().height()-20, 100, canvas->getDeviceClipBounds().height()-100, p);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-05
      相关资源
      最近更新 更多