Ngô Hải Đăng
Thành viên hoạt động
- Tham gia
- 31/8/17
- Bài viết
- 183
- Được thích
- 247
- Giới tính
- Nam
Code tô màu cũ của bạn đâu cho lên đây xem nào.Mình có 1 vùng dữ liệu gồm 360 hàng và 480 cột, mỗi ô chứa 1 giá trị màu. Cho mình hỏi là có cách nào tô màu nhanh vùng dữ liệu này ngoài cách dùng vòng lặp For và tô màu từng ô không? Vì nếu kích thước dữ liệu là 1000 x 1000 thì tô từng ô rất lâu.
Code của mình đâyCode tô màu cũ của bạn đâu cho lên đây xem nào.
Sub ToMau()
Dim mCell As Range
For Each mCell In [A1].CurrentRegion
mCell.Interior.Color = mCell
Next mCell
End Sub
Lúc bạn lấy giá trị màu đặt xuống cell sao bạn không tô màu lúc đó luôn?Bài toán này thực ra là có 2 phần. Phần 1 là lấy giá trị màu của từng pixel vô từng ô (Mình đã làm được). Còn phần 2 là tô màu, mình cũng làm được nhưng không biết có cách nào để tô nhanh hơn không, tô từng ô thì gặp những bức hình lớn thì nó chạy rất lâu.
Làm sao biết những ô nào cùng màu để gom? (trong số 1 triệu ô?)Màu trong một bức tranh sẽ có nhiều chỗ giống nhau, nếu vậy thì tô màu tất cả các ô cùng màu một lúc thì chắc tốc độ sẽ tăng thêm khoảng 500%
Thì cứ hớn hở mả duyệt từng phần tử trong mảng thui. bạn nào cuồng đít sần sài cũng được, ai đam mê ado chắc cũng nghĩ ra một cái tuyệt chiêu nào nào đó.Làm sao biết những ô nào cùng màu để gom? (trong số 1 triệu ô?)
nhiều ô mà sợ không khỏe thì chắc chia nhỏ theo lô khoảng 10000 ô, sau đó làm trên 10000 ôtrong số 1 triệu ô?
Phải biết suy nghĩ 1 chút. Dù chỉ 100 ô màu ngẫu nhiên như đề bài cũng không có cách nào biết ô nào giống ô nào để mà gom, ngoại trừ việc chạy vòng lặp duyệt qua đủ 100 ô đó.Thì cứ hớn hở mả duyệt từng phần tử trong mảng thui. bạn nào cuồng đít sần sài cũng được, ai đam mê ado chắc cũng nghĩ ra một cái tuyệt chiêu nào nào đó.
nhiều ô mà sợ không khỏe thì chắc chia nhỏ theo lô khoảng 10000 ô, sau đó làm trên 10000 ô
Lúc bạn lấy giá trị màu đặt xuống cell sao bạn không tô màu lúc đó luôn?
Lúc lấy giá trị màu xuống Cell em cũng dùng vòng lặp For mà gán vô mảng 2 chiều trước nên tốc độ nhanh hơn. Có cách để code tô màu chạy nhanh hơn là tắt ScreenUpdate do lệnh Interior.Color thao tác lên màn hình nên làm chậm code, mà em thì lại muốn giữ ScreenUpdate (có vẻ hơi mâu thuẫn).Có cách không chạy luôn, đó là thay vì gán số xuống thì tô màu luôn trong phần 1 như @ndu96081631 nói
Chắc sẽ suy nghĩ theo cách này.Màu trong một bức tranh sẽ có nhiều chỗ giống nhau, nếu vậy thì tô màu tất cả các ô cùng màu một lúc thì chắc tốc độ sẽ tăng thêm khoảng 500%
Giữ screen update làm gì, nếu giữ thì chậm là chắcLúc lấy giá trị màu xuống Cell em cũng dùng vòng lặp For mà gán vô mảng 2 chiều trước nên tốc độ nhanh hơn. Có cách để code tô màu chạy nhanh hơn là tắt ScreenUpdate do lệnh Interior.Color thao tác lên màn hình nên làm chậm code, mà em thì lại muốn giữ ScreenUpdate (có vẻ hơi mâu thuẫn).
Một cách khác không cần làm gì cả, chỉ cần.. tốn tiền là phải có 1 máy tính mạnh. Như máy tôi: core i5 thế hệ 8 + ram 8GB ---> Code chạy trong tích tắcGiữ screen update làm gì, nếu giữ thì chậm là chắc
Còn không giữ thì cũng chậm, vì tranh nhiều cells
Tuy thế 1 bức tranh thì phải chấp nhận, có những cái phải chấp nhận mất thời gian vì nó là hiển thị, so với làm tay còn nhanh hơn nhiều
Muốn nhanh thì hợp lại thành BMP hay JPG rồi gán xuống (thế lại thành bài toán ngược lại, cần chi gỡ ra cells)
Anh có cách chẳng cần vòng lặp gì cả, nhưng bây giờ bận tiếp bạn bè rồi, mai rảnh anh em mình uống coffee bàn tiếp.Một cách khác không cần làm gì cả, chỉ cần.. tốn tiền là phải có 1 máy tính mạnh. Như máy tôi: core i5 thế hệ 8 + ram 8GB ---> Code chạy trong tích tắc
Lót dép hóng tổ sư phụ không dùng vòng lặpAnh có cách chẳng cần vòng lặp gì cả, nhưng bây giờ bận tiếp bạn bè rồi, mai rảnh anh em mình uống coffee bàn tiếp.
máy em chạy lần đầu nhanh, mà chạy lần nữa thì mất 40s, hjkMột cách khác không cần làm gì cả, chỉ cần.. tốn tiền là phải có 1 máy tính mạnh. Như máy tôi: core i5 thế hệ 8 + ram 8GB ---> Code chạy trong tích tắc
Bạn tham khảo file này xem!Mình có 1 vùng dữ liệu gồm 360 hàng và 480 cột, mỗi ô chứa 1 giá trị màu. Cho mình hỏi là có cách nào tô màu nhanh vùng dữ liệu này ngoài cách dùng vòng lặp For và tô màu từng ô không? Vì nếu kích thước dữ liệu là 1000 x 1000 thì tô từng ô rất lâu.