2010-03-04 31 views
15

Tôi đang làm việc trên ứng dụng xử lý ảnh SEM, được viết bằng WPF. Tôi có một điều khiển hiển thị hình ảnh, bắt nguồn từ Canvas, hiển thị hình ảnh & lớp phủ bằng cách sử dụng DrawingVisuals (một cho mỗi "lớp"). Nó cũng thực hiện Zoom & Pan sử dụng tỷ lệ & chuyển đổi dịch, được áp dụng trên DrawingVisuals.Làm thế nào tôi có thể kéo dài bitmap trong WPF mà không làm mịn pixel

Khi tôi phóng to hình ảnh để xem từng pixel, chúng được hiển thị trơn tru, rõ ràng bằng cách sử dụng lọc song tuyến để kéo dài bitmap (không có gì ngạc nhiên khi WPF được hiển thị thông qua Direct3D). Tuy nhiên, đối với trường hợp sử dụng của tôi, tôi thà xem các pixel riêng lẻ như các hộp sắc nét, như thường lệ trong mọi trình chỉnh sửa hình ảnh như Photoshop. Đó là lý do tại sao người dùng ứng dụng của tôi thu phóng hình ảnh -> để có thể hoạt động ở cấp pixel.

Có tùy chọn đó trong WPF (ngoài việc kéo giãn bitmap theo cách thủ công trước khi hiển thị nó) không? Tôi đã không thể tìm thấy bất cứ điều gì.

cảm ơn trước, Zbynek Vrastil Cộng hòa Séc

Trả lời

16

Cuối cùng tìm thấy một câu trả lời, với một số sự giúp đỡ từ chuyên gia Exchange. Lớp RenderOptions định nghĩa thuộc tính đính kèm BitmapScalingMode, có thể được đặt thành MaximumNeighbor. Vì vậy,

RenderOptions.SetBitmapScalingMode(imageDisplay, BitmapScalingMode.NearestNeighbor); 

thực hiện thủ thuật.

Zbynek Vrastil

+0

Tuyệt! Đã cứu tôi rất nhiều rắc rối. –

+11

Và bạn cũng có thể thiết lập nó từ XAML: '' –

0

Ghét để đặt một dampener về điều gì đó, nhưng nếu NearestNeighbor công trình như GDI +, thì điều này sẽ cung cấp cho bạn một thành công hạn chế. Khi bạn tăng độ phóng đại ở các khu vực có độ tương phản cao, bạn có thể không nhận được kết quả mong muốn. Trong GDI + bạn thấy người da đen trở thành màu xanh, và người da trắng trở thành màu đỏ - một lần nữa tôi căng thẳng trong các lĩnh vực có độ tương phản cao! Nếu đây không phải là trường hợp trong WPF, hãy nghĩ rằng mình may mắn!

Có lẽ nhà phát triển WCF có thể xác nhận điều đó?

Tôi nhận thấy rằng có nhiều tùy chọn hơn để xem xét, nhưng tôi chỉ có thể nói cho lớp GDI + Graphics, điều này có thể hữu ích cho một người nào đó.

Graphics graph = e.Graphics; 
graph.InterpolationMode = InterpolationMode.NearestNeighbor; 
graph.CompositingQuality = CompositingQuality.AssumeLinear; 
graph.SmoothingMode = SmoothingMode.None; 

Điều này phù hợp với tôi. Tôi nghĩ rằng SmoothingMode là thủ thuật. Hy vọng điều này sẽ giúp người khác ra khỏi đó.

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