Có lẽ thật dại dột khi cố thực hiện lại công việc của một bậc thầy nào đó .
Tuy nhiên mình cũng đã cố thử để tìm 1 câu trả lời cho bản thân mình...là liệu Excel có thể chiếu được 1 đoạn phim một cách "mượt mà" ở mức chấp nhận được hay không? hix
For r = 1 To height Step lResol
For c = 1 To width Step lResol
r1 = Int(r / lResol) + 1
c1 = Int(c / lResol) + 1
Arr(r1, c1) = GetPixel(DC, c - 1, r - 1)
Next c
Next r
Với biến lResol ta cho = 5 chẳng hạn thì việc scan cái hình em be.bmp của bạn gần như diễn ra trong tích tắc
--------------------------
Mình thì không có hứng thú với việc làm video nhưng lại rất hứng thú với code của bạn (scan pic) và muốn nghiên cứu nó để ứng dụng cho những việc khác sau này. Vậy nhân đây mình xin bạn tư vấn giúp 3 câu hỏi dưới đây: 1> Nếu ta dùng file jpg (chứ không phải bmp) thì phải sửa code thế nào?
2> Nếu ta scan hình là 1 object nằm trên bảng tính thì sẽ sửa code thế nào?
3> Chuyển từ Interior.Color sang Interior.ColorIndex bằng cách nào?
Nếu đi theo quan điểm chỉ dùng chính Excel để trình diễn thì mình có mấy ý sau:
Với hình tròn cỡ 40x40 (khoảng 90 điểm ảnh hữu dụng), còn hình ngôi sao thì ước chừng 110-130 điểm ảnh hữu dụng.
Trên khung hình biểu thị cỡ 45x80=3600. Tỷ lệ điểm ảnh hữu dụng so với diện tích khung hiển thị là 90/3600=2,5%. Với tỷ lệ tương đối lý tưởng này nhưng tốc độ hiện thị vẫn chưa đủ đánh lừa được thị giác. Người xem vẫn cảm giác được rõ là hình đang được vẽ từ trên xuống.
Vậy giả sử hiển thị 1 khung hình có tỷ lệ điểm ảnh hữu dụng là 50% (gấp 20 lần) hoặc bình quân khoảng 10% (gấp 4 lần) thì tốc độ hiển thị sẽ ra sao? Nếu làm như cách anh nói thì chắc chắn tốc độ hiển thị sẽ không đều lúc nhanh (với hình nhỏ) và chậm (nếu hình lớn). Mình có thử chỉnh timer tăng/giảm đi như tốc độ hiển thị cũng không khả quan hơn.
Một vấn đề nữa có liên quan đến ý trước đây là tốc độ hiện thị khung ảnh trong một giây tối thiểu là bao nhiêu để đủ đánh lừa thị giác người xem. Sau khi bắt tay vào làm thử thì mình phát hiện ra rằng:
Với 1 chuyển động tốc độ trung bình thì cũng cần ít nhất khoảng 9 khung ảnh.
Còn với 3 khung ảnh chỉ phù hợp nếu diễn tả 1 chuyển động nhanh hoặc rất nhanh kiểu như 1 chiếc siêu thanh chỉ kịp lưu lại trên võng mạc 1 tấm ảnh của nó trong tích tắc.
Như vậy thì yêu cầu về tốc độ máy tính sẽ ko phải là 24 lần mà phải là 72 lần nhanh hơn. Cứ tạm cho định luật Moore đúng mãi mãi thì cứ sau 1,5 năm tốc độ máy tính nhanh gấp đôi thì chắc cũng cỡ 10 năm nữa 1 cái máy tính bình thường mới có thể làm nhãn quan chúng ta thoả mãn... trừ trường hợp chúng ta có tiền mua 1 chiếc siêu máy tính.
Tuy nhiên nếu có ai đó đang quan tâm vấn đề này thì cũng đừng bi quan như mình... Hiện tại chúng ta vẫn có thể dùng các ô Excel để thực hiện việc chiếu 1 đoạn clip đấy nhé kể cả với 1 độ phân giải không tưởng. Nhưng cách làm sẽ rất khác và sẽ cần nhiều lần của 5 tiếng đồng hồ.
For r = 1 To height Step lResol
For c = 1 To width Step lResol
r1 = Int(r / lResol) + 1
c1 = Int(c / lResol) + 1
Arr(r1, c1) = GetPixel(DC, c - 1, r - 1)
Next c
Next r
Với biến lResol ta cho = 5 chẳng hạn thì việc scan cái hình em be.bmp của bạn gần như diễn ra trong tích tắc
--------------------------
Mình thì không có hứng thú với việc làm video nhưng lại rất hứng thú với code của bạn (scan pic) và muốn nghiên cứu nó để ứng dụng cho những việc khác sau này. Vậy nhân đây mình xin bạn tư vấn giúp 3 câu hỏi dưới đây: 1> Nếu ta dùng file jpg (chứ không phải bmp) thì phải sửa code thế nào?
2> Nếu ta scan hình là 1 object nằm trên bảng tính thì sẽ sửa code thế nào?
3> Chuyển từ Interior.Color sang Interior.ColorIndex bằng cách nào?
Lúc nào cũng có những kiến thức mới lạ. Cảm ơn bạn nhé
Hỏi thêm: Có phải hàm GetPictureObject dùng được với Picture nằm trên đĩa hoặc Picture là 1 Object trên bảng tính không?
(hỏi thế là vì mấy cái ghi chú bạn ghi bằng font gì tôi đọc không ra ---> Chỉ đoán)
Lúc nào cũng có những kiến thức mới lạ. Cảm ơn bạn nhé
Hỏi thêm: Có phải hàm GetPictureObject dùng được với Picture nằm trên đĩa hoặc Picture là 1 Object trên bảng tính không?
(hỏi thế là vì mấy cái ghi chú bạn ghi bằng font gì tôi đọc không ra ---> Chỉ đoán)
Sub Button1_Click()
Dim k As Long, r As Long, g As Long, b As Long, mau As Long, tmp As Long, Arr(1 To 56) As String
For k = 1 To 56
Cells(k, 1).Interior.ColorIndex = k
mau = Cells(k, 1).Interior.Color
b = mau \ 65536
tmp = mau Mod 65536
g = tmp \ 256
r = tmp Mod 256
Arr(k) = "ColorIndex = " & k & ", Color = " & mau & " = RGB(" & r & ", " & g & ", " & b & ")"
Next k
Range("B1:B56").Value = Application.WorksheetFunction.Transpose(Arr)
End Sub
Cảm ơn bạn về cái Handle, trước đây đã biết, bây giờ lại biết thêm 1 chút
Giải thích rất chi tiết nhưng nói thật lòng là tôi hiểu chắc cở.. 10%
Nhưng không sao... thề với lòng, cái gì tôi muốn biết thì sẽ cố gắng tìm hiểu ---> Thông qua các thí nghiệm để ngộ ra vấn đề (đơn giản vì tôi chưa học qua bất cứ trường lớp nào về Excel hay lập trình)
Một lần nữa cảm ơn bạn! Nếu có vấn đề gì tôi sẽ lại làm phiền tiếp
(Riêng về thằng em Interior.ColorIndex chắc ta sẽ bàn vào 1 topic khác thích hợp. Nói chung là tôi muốn chuyển từ 16 triệu màu sang 56 màu chứ không phải ngược lại)
Cảm ơn bạn về cái Handle, trước đây đã biết, bây giờ lại biết thêm 1 chút
Giải thích rất chi tiết nhưng nói thật lòng là tôi hiểu chắc cở.. 10%
Nhưng không sao... thề với lòng, cái gì tôi muốn biết thì sẽ cố gắng tìm hiểu ---> Thông qua các thí nghiệm để ngộ ra vấn đề (đơn giản vì tôi chưa học qua bất cứ trường lớp nào về Excel hay lập trình)
Một lần nữa cảm ơn bạn! Nếu có vấn đề gì tôi sẽ lại làm phiền tiếp
(Riêng về thằng em Interior.ColorIndex chắc ta sẽ bàn vào 1 topic khác thích hợp. Nói chung là tôi muốn chuyển từ 16 triệu màu sang 56 màu chứ không phải ngược lại)
Cảm ơn bạn về cái Handle, trước đây đã biết, bây giờ lại biết thêm 1 chút
Giải thích rất chi tiết nhưng nói thật lòng là tôi hiểu chắc cở.. 10%
Nhưng không sao... thề với lòng, cái gì tôi muốn biết thì sẽ cố gắng tìm hiểu ---> Thông qua các thí nghiệm để ngộ ra vấn đề (đơn giản vì tôi chưa học qua bất cứ trường lớp nào về Excel hay lập trình)
Một lần nữa cảm ơn bạn! Nếu có vấn đề gì tôi sẽ lại làm phiền tiếp
(Riêng về thằng em Interior.ColorIndex chắc ta sẽ bàn vào 1 topic khác thích hợp. Nói chung là tôi muốn chuyển từ 16 triệu màu sang 56 màu chứ không phải ngược lại)
1. Dùng hàm của siwtom có thể lấy ra 3 tham số RGB của 56 màu Excel
2. Thử bằng 1 phần mềm đồ họa nào đó (Paint chằng hạn) như sau:
- mở cửa sổ chọn màu có 3 ô RGB
- gõ tham số RGB của 1 màu Excel vào
- thay đổi lần lượt từng tham số R, G, B từng đơn vị một, đến khi nào màu không chấp nhận được nữa.
- Ghi lại phạm vi thay đổi các tham số có thể chấp nhận
- Dùng cách tính ngược với hàm ở bước 1, tính ra phạm vi màu có thể quy về 1 màu thử của Excel.
- chuyển qua màu thử thứ 2 của Excel.