Có một đơn giản MSDN example về WriteableBitmap.Wpf: Tại sao WriteableBitmap trở nên chậm hơn?
Nó cho thấy cách vẽ đường tự do bằng con trỏ bằng cách chỉ cập nhật một pixel khi chuột được nhấn và di chuyển qua Điều khiển WPF-Hình ảnh.
writeableBitmap.Lock();
(...set the writeableBitmap.BackBuffers pixel value...)
writeableBitmap.AddDirtyRect(new Int32Rect(column, row, 1, 1));
writeableBitmap.Unlock();
Bây giờ tôi đang cố gắng để hiểu được những hành vi sau khi di chuyển con trỏ chuột rất nhanh:
Nếu kích thước hình ảnh/bitmap là ví dụ tương đối nhỏ 800: 600 pixel, sau đó điểm ảnh được vẽ cuối cùng luôn được "đồng bộ hóa" với vị trí con trỏ chuột, tức là không có sự chậm trễ, phản ứng rất nhanh trên các chuyển động của chuột.
Nhưng nếu bitmap lớn hơn, ví dụ: 1300: 1050 pixel, bạn có thể nhận thấy độ trễ, điểm ảnh được rút cuối cùng luôn xuất hiện một chút chậm trễ sau con trỏ chuột di chuyển.
Vì vậy, trong cả hai trường hợp, chỉ một pixel được cập nhật với "AddDirtyRect
", tốc độ phản ứng phải độc lập với kích thước bitmap !? Nhưng có vẻ như Writeablebitmap chậm hơn khi kích thước của nó lớn hơn.
Hoặc thực hiện toàn bộ bitmap bằng cách nào đó sẽ được chuyển sang thiết bị đồ họa trên mọi cuộc gọi writeableBitmap.Unlock();
và không chỉ khu vực hình chữ nhật được định sẵn theo phương pháp AddDirtyRect
?
Fritz
Nhưng tôi thấy rằng một người nào đó trong chủ đề đó vẫn đang trải qua các sản phẩm hoàn hảo, vì vậy có ai thực sự xác nhận rằng nó đã được sửa chưa? –
Hiện tại nó xuất hiện WriteableBitmap vẫn có vấn đề về hiệu suất. Tôi sử dụng AddDirtyRect như fritz để thay đổi chỉ các pixel cần thay đổi, nhưng hình ảnh càng lớn thì tốc độ càng chậm. Tôi đang sử dụng .NET 4.6, bằng cách này: /. –