2012-04-29 11 views
6

Tôi đang sử dụng ImageList cho TreeViewListView. Trước tiên tôi đã đặt chất lượng hình ảnh thành 32 bit và sau đó thêm hình ảnh bán trong suốt. Chất lượng có vẻ OK, nhưng sau một vài phút mã hóa, biên dịch và thực thi ứng dụng, chất lượng có vẻ xấu.Danh sách ảnh: Hình ảnh 32 bit bị mất chất lượng

Xem ảnh chụp màn hình: enter image description here

tính sử dụng

ColorDepth: Depth32Bit 
ImageSize: 16; 16 
TransparentColor: Transparent 

Có pixel đen đằng sau pixel mà là bán trong suốt nhưng không hoàn toàn minh bạch.

Việc thêm lại tất cả hình ảnh sẽ khôi phục chất lượng gốc, nhưng sau một vài phút, hình ảnh trông giống như ở bên phải của ảnh chụp màn hình.

+0

Phiên bản Visual Studio nào? Tôi đặt cược nó hoạt động tốt nếu bạn tải lên danh sách hình ảnh trong thời gian chạy. Có thể là một lỗi trong mã VS lưu trữ/tải trạng thái danh sách hình ảnh tại thời điểm designtime. –

+0

Đó là VS2010 Ultimate. Trước tiên tôi cũng nghĩ về việc tải chúng vào thời gian chạy, nhưng đó không phải là cách nó * nên *. Bất kỳ ý tưởng nào khác? – bytecode77

+0

Tải tại thời gian chạy từ tài nguyên là chính xác những gì tôi sẽ làm. Sau đó, tôi có thể chọn kích thước phù hợp với tỷ lệ phông chữ. –

Trả lời

8

Có vẻ như dữ liệu kênh alpha bị mất khi hình ảnh được lưu trữ dưới dạng ImageStream (hành vi mặc định của VS Designer). Vì vậy, nếu bạn không muốn sử dụng Trình thiết kế để đặt hình ảnh trong ImageList, bạn có thể sử dụng hình ảnh bán trong suốt tối đa ColorDepth.Depth32Bit. Rất bất tiện nhưng nó hoạt động.

Vì vậy, bạn có thể đặt hình ảnh của mình vào Resources.resx tệp và thêm chúng vào vị trí thích hợp trong mã. Ví dụ trong constructor của bạn UserControl/Form, sau khi cuộc gọi đến InitializeComponent() theo mã như thế này:

_imageList.Images.Add(Resources.Image32); 
    _imageList.Images.SetKeyName(0, "Image32"); 
    _myButton.Image = 0; 

(Thông tin này có sẵn trong ý kiến ​​để phản ứng đánh dấu câu trả lời, tôi đã thêm này là câu trả lời vì nó sẽ là khó bỏ lỡ tùy chọn có sẵn khác)