2012-04-21 23 views
7

Tôi đang vẽ biểu đồ trong ứng dụng WPF, nhưng các đường được vẽ bằng cách sử dụng drawingContext.DrawLine(...) được vẽ thành các ranh giới pixel phụ.Bắt buộc vẽ Đường liên kết để chụp tới các ranh giới pixel

Tôi có thể làm cho chúng trông đẹp bằng cách tạo các đối tượng Line, nhưng tôi không muốn tạo hàng chục nghìn lần mỗi khi hình ảnh bị vô hiệu.

Làm cách nào để buộc chúng phù hợp với pixel?

+0

câu hỏi hay, một câu hỏi về một phần của tôi, và tôi hy vọng tôi hiểu bạn một cách chính xác, vì vậy bạn đã chọn vẽ một đồ thị, tự làm mọi thứ (mọi dòng) - siêu ấn tượng, đầu tôi xuống. Bây giờ bạn cần phải? bạn có thể sử dụng thư viện để thực hiện việc nâng hạng nặng cho bạn không? ..không có nhiên, bạn đang viết thành phần biểu đồ của riêng bạn. –

+0

@denismorozov là thành phần biểu đồ của riêng tôi. Tôi đang vẽ đồ thị trang tham khảo từ một người quản lý bộ nhớ mô phỏng cho một dự án trường học. Chúng tôi đang nghiên cứu cách hoạt động bộ nhớ của các thuật toán khác nhau đi qua các giai đoạn và thử các thuật toán thay thế trang khác nhau để giảm thiểu lỗi trang. Nó thực sự thú vị :) –

+0

rất tuyệt! Tôi đang nghĩ về chơi với điều khiển biểu đồ của riêng tôi. Chúc may mắn! –

Trả lời

9

Bạn có thể vẽ các đường vào một DrawingVisual có nguồn gốc mà có bảo vệ VisualEdgeMode bất động sản thiết lập để EdgeMode.Aliased:

public class MyDrawingVisual : DrawingVisual 
{ 
    public MyDrawingVisual() 
    { 
     VisualEdgeMode = EdgeMode.Aliased; 
    } 
} 

public class DrawingComponent : FrameworkElement 
{ 
    private DrawingVisual visual = new MyDrawingVisual(); 

    public DrawingComponent() 
    { 
     AddVisualChild(visual); 

     using (DrawingContext dc = visual.RenderOpen()) 
     { 
      dc.DrawLine(new Pen(Brushes.Black, 1d), new Point(100, 100), new Point(100, 200)); 
      dc.DrawLine(new Pen(Brushes.Black, 1d), new Point(105.5, 100), new Point(105.5, 200)); 
      dc.DrawLine(new Pen(Brushes.Black, 1d), new Point(112, 100), new Point(112, 200)); 
     } 
    } 

    protected override int VisualChildrenCount 
    { 
     get { return 1; } 
    } 

    protected override Visual GetVisualChild(int index) 
    { 
     return visual; 
    } 
} 

Strange đủ, nhưng gọi RenderOptions.SetEdgeMode(visual, EdgeMode.Aliased) trên DrawingVisual không có nguồn gốc từ không thực hiện công việc.

2

Tuyệt vời.

Một tùy chọn khác (phức tạp hơn trong trường hợp đó) đang sử dụng RenderOptions.SetEdgeMode trên DrawingGroup:

https://stackoverflow.com/a/16984921/2463642

+1

Làm việc tốt với tôi, cảm ơn. Các biểu tượng không còn mờ nữa –

Các vấn đề liên quan