2012-10-31 69 views
5

Tôi đang tạo trình chỉnh sửa bản đồ cho trò chơi trong C# Windows Forms. Những gì tôi cần là một mạng lưới mà sẽ phải lưu trữ ngay cả một vài ngàn hình ảnh.Vẽ một số lượng lớn ảnh trong C# Windows Forms

Cách tiếp cận đầu tiên của tôi là tạo điều khiển Panel và sau đó thêm nhiều PictureBoxes vào đó. Thật không may 2000 hình ảnh mất khoảng 3 giây để vẽ.

Sau đó, tôi quyết định thử tạo Rectangles và vẽ Images trên chúng theo phương pháp Panel 'OnPaint() với hy vọng nhận được kết quả tốt hơn nhưng vẫn rất chậm.

Có cách nào hiệu quả hơn để hiển thị nhiều hình ảnh trong Windows Forms không?

Cảm ơn trước vì bất kỳ lời khuyên nào.

+0

Có phải tất cả những hình ảnh 2000 có thể nhìn thấy trên màn hình cùng một lúc? –

+0

Có, họ đang có. Và họ cần phải được trả lại rất nhanh để đi từ một nơi này sang bản đồ khác sẽ không mất 3 giây. –

+0

@Mosquito - Điều bạn muốn không thực tế. Tại sao bạn không thể tạo ra các hình ảnh, sau đó xác định, hình ảnh nào bạn cần hiển thị? Tôi sẽ lập luận rằng '3 giây 'là nhanh như bạn sẽ nhận được. –

Trả lời

3

Sử dụng các sự kiện sơn như bạn đã làm nhưng ...

Là một phần của tải những hình ảnh, bộ nhớ cache một phiên bản thu nhỏ, nơi bạn hợp nhất 16 hình ảnh thành một, mà chỉ là 125 hình ảnh, khi bạn thu nhỏ trên một quy mô nhất định, chuyển sang sử dụng phiên bản thu nhỏ được hiển thị trước.

Bạn có thể làm điều đó thường xuyên như bạn muốn cho nhiều mức thu phóng với ý tưởng giữ ít hình ảnh nhất có thể trên màn hình bất kỳ lúc nào. Vì vậy, bạn có thể chia nó bằng 4 lần nữa.

Tôi làm điều này cho một dự án có bản đồ bao gồm 65536 hình ảnh (256 x 256). Bộ nhớ cache cũng được ghi vào đĩa để mỗi khi bạn thu nhỏ, bạn sẽ thấy cùng một số lượng hình ảnh. Trong phần biên tập của tôi, tôi chỉ có thể xem 16 hình ảnh cùng một lúc, ngay cả khi tôi đang xem toàn bộ bản đồ. Bạn có thể cải thiện thêm về điều này bằng cách biết các tùy chọn có sẵn cho người dùng (ví dụ: Xoay và Thu phóng), điều này cho bạn một tập hợp con giới hạn các hình ảnh mà người dùng có thể xem tiếp theo để bạn có thể tải trước để cải thiện hiệu suất.

Bạn sẽ tăng thời gian tải ban đầu nhưng tôi đặt cược bạn đã có một thời gian tải đáng kể kéo 2000 hình ảnh tắt đĩa

+0

Cảm ơn rất nhiều vì câu trả lời. :-) –

+0

@Mosquito, tôi rất vui vì nó rất hữu ích! –

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