none
請教WPF如何實作圖片的"橡皮擦"功能? RRS feed

  • 問題

  • 近期想要實作這個功能, 很多人的說法是, 在圖上面覆蓋與背景色相同的Line or Rectangle, 看起來就像是Eraser

    但因為我想要做的是擦過後的地方是呈現Transparent狀態, 所以以上的方式不適合,

    後來找到利用Geometry, 做Geometry.Combine並加入GeometryCombineMode.Exclude的方式,

    再對Image做Clip,可以達到我要的效果,

    但是有些缺憾是, 不論是用EllipseGeometry or RectangleGeometry, 就是有那麼一些不自然, 不像一筆擦過的感覺

    最好的方式應該是LineGeometry, 但是LineGeometry combine後沒有效果, 因為它沒有thickness,

    改為利用Path轉Geometry也無效, 所以上來請教, 煩請賜教, 感謝

    我後來是這樣的寫法:

    myLineGeometry.StartPoint = tempPosition;
    myLineGeometry.EndPoint = e.GetPosition(image1);
    Path myPath = new Path();
    myPath.Stroke = Brushes.Black;
    myPath.StrokeThickness = 20;
    myPath.Fill = Brushes.Black;
    myPath.Data = myLineGeometry;
    Geometry a = myPath.Data;
    a = a.GetFlattenedPathGeometry();
    if (pg == null)
       pg = Geometry.Combine(myRectGeo, a, GeometryCombineMode.Exclude, null);
    else
       pg = Geometry.Combine(pg, a, GeometryCombineMode.Exclude, null);
    image1.Clip = pg;

    2010年10月6日 上午 05:57

所有回覆