2009-03-06 40 views
5

Nếu bạn thêm hình ảnh PNG vào điều khiển ImageList và sử dụng ImageList đó với ListView hoặc TreeView trong ứng dụng Windows Forms (.Net 2.), các biểu tượng được hiển thị trong ListView có "hào quang" màu lam xung quanh.Giải pháp cho lỗi minh bạch ImageList?

Ví dụ:

alt text http://deeperdesign.wordpress.com/files/2009/03/blue-halo.png

Có ai biết một công trình xung quanh đó cho phép bạn thêm PNG 32bit với một kênh Alpha để một ImageList và giữ lại các pixel trong suốt và tránh ảnh hưởng quầng/lỗi?

Cảm ơn.

Trả lời

10

Tôi không nghĩ rằng đây là lỗi. Bạn nên đặt độ sâu màu ImageList thành 32-bit và bạn cần phải sử dụng kiểu trực quan.

Nếu ứng dụng có kiểu trực quan được bật, WinForms sử dụng phiên bản 6.0 của các điều khiển chung của Windows, hỗ trợ tính trong suốt của alpha. Nếu không, nó sẽ sử dụng phiên bản trước đó không hỗ trợ tính trong suốt của alpha và hiển thị hình ảnh ARGB không chính xác với một vầng hào quang màu xanh lam.

Nếu bạn cần giải pháp, bạn có thể thử tạo bitmap mới có cùng kích thước, điền chúng với BackColor của ListView, tạo đối tượng Đồ họa trên bitmap và vẽ hình ảnh ARGB của bạn lên bitmap. Sau đó, bạn có thể chèn các bitmap được làm mờ trước đó vào ImageList. Nếu bạn làm điều này, tuy nhiên, lựa chọn sẽ trông buồn cười trên biểu tượng trong ListView.

Một công việc khác là truy cập trực tiếp dữ liệu bitmap (sử dụng LockBits()) và trộn thủ công bất kỳ pixel bán trong suốt nào, điều này sẽ khiến cho hình ảnh được hiển thị đúng và trông khá giống cách .

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