• Thứ Hai, 25/07/2011 09:05 (GMT+7)

    Xuất phim từ component Windows Media trong VB6

    Câu hỏi :

    Tôi có chương trình xem phim viết bằng VB6, sử dụng Component Windows Media, nay tôi muốn thêm chức năng export đoạn phim khi đang tạm dừng (pause), lưu thành file hình jpg. Xin hướng dẫn.



    Trả lời :

    Cả ứng dụng Windows Media Player (WMP) lẫn điều khiển Windows Media Player đều không cung cấp chức năng để người dùng có thể “capture” và lưu frame ảnh khi nó đang chiếu phim hay khi nó đang “pause”. Do đó để lập trình thực hiện việc “capture” và lưu frame ảnh của ứng dụng WMP hay của điều khiển WMP hoặc của 1 ứng dụng bất kỳ, cách tổng quát nhất là nhấn phím “Print Screen” để hệ điều hành copy ảnh bitmap của toàn màn hình vào clipboard, rồi viết đoạn code lấy ảnh từ clipboard và lưu lên file theo yêu cầu. Sau đây là qui trình minh họa để viết 1 ứng dụng đơn giản bằng ngôn ngữ VB .Net (version mới hơn VB 6.0) có chức năng lưu ảnh trong clipboard lên file:

    1. Chạy chương trình Visual Studio 2005 (hay version mới hơn), chọn menu File.New Project.

    2. Khi cửa sổ "New Project" hiển thị, chọn "Project Types" là Visual Basic.Windows, chọn Templates là "Windows Application", nhập tên Project là "WMPCapture" rồi chọn button Ok để tạo Project mới theo các thông tin đã xác định.

    3. Chọn menu View.Code để hiển thị cửa sổ soạn code cho form ứng dụng, viết code sau đây:
    'đặc tả class form ứng dụng

    Public Class Form1

    'định nghĩa thủ tục khởi động cho form

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    'định nghĩa các biến cần dùng

    Dim Capture As System.Drawing.Bitmap

    Dim SaveFileDialog1 As New SaveFileDialog

    'đọc ảnh trong Clipboard vào biến Capture

    Capture = CType(Clipboard.GetData(System.Windows.Forms.DataFormats.Bitmap), Bitmap)

    'hiển thị cửa sổ chọn file cần lưu

    SaveFileDialog1.DefaultExt = "*.bmp"

    SaveFileDialog1.Filter = "Bmp Files|*.bmp"

    SaveFileDialog1.ShowDialog()

    'cố gắng lưu ảnh lên file

    Try

    Capture.Save(saveFileDialog1.FileName)

    Catch ex As Exception

    'nếu có lỗi thì báo lỗi

    MessageBox.Show("An error has occured while saving", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

    End Try

    End Sub

    End Class

    4. Chọn menu Build.Rebuild WMPCapture để dịch ứng dụng ra file khả thi.

    5. Chạy ứng dụng WMP (hay bất kỳ ứng dụng chơi multimedia nào), mở file phim và trình chiếu. Để copy được frame ảnh rõ nhất, bạn nên chạy tiện ích chiếu phim ở chế độ "full screen". Dời marker của thanh Progressbar về vị trí chứa frame ảnh cần lưu, khi thấy frame ảnh cần lưu hiển thị thì "pause" lại, nhấn phím "Print Screen" để HĐH copy màn hình vào clipboard.

    6. Chạy ứng dụng WMPCapture vừa viết, nó sẽ hỏi file cần lưu và lưu ảnh bitmap trong clipboard lên file (dạng *.bmp).

    7. Nếu muốn chuyển về định dạng khác (thí dụ *.jpg), bạn có thể dùng bất kỳ trình soạn ảnh nào (Photoshop, CorelDraw, Paint...).

    Lưu ý nếu bạn dùng ứng dụng hay điều khiển WMP để chiếu phim thì chức năng Print Screen thường không thể "capture" frame ảnh do WMP hiển thị (do đặc điểm hiển thị động của WMP), do đó tốt nhất là dùng ứng dụng chiếu phim của hãng khác như KMP.
     

    Chuyên mục: Lập trình