Các bước thao tác với file video

Một phần của tài liệu đồ án tốt nghiệp nghiên cứu một số kỹ thuật xác định độ đo tương tự và ứng dụng (Trang 29 - 31)

AVI là chuẩn video thường được tích hợp trong các thư viện của các môi trường lập trình. Để xử lý video, cần có các thao tác cơ bản để chuyển về xử lý ảnh các khung hình (các frames).

Bƣớc 1: Mở và đóng thƣ viện

Trước mọi thao tác với file AVI, chúng ta phải mở thư viện:

AVIFileInit( )

Hàm này không cần tham số, có nhiệm vụ khởi động thư viện cung cấp các hàm thao tác với file AVI. (Đó là thư viện vfw32.lib, được khai báo trong file vfw.h). Sau tất cả các thao tác bạn phải nhớ đóng thư viện đã mở lúc đầu, chỉ bằng lệnh:

AVIFileExit( )

Nếu thiếu bất cứ hàm nào, dù là mở hay đóng thư viện thì trình biên dịch đều sẽ thông báo lỗi.

Bƣớc 2: Mở và đóng file AVI để thao tác:

Sau khi mở thư viện, bạn phải mở file AVI bạn định thao tác:

AVIFileOpen(PAVIFILE* ppfile, LPCSTR fname, UINT mode, CLSID

pclsidHandler)

Thực chất, hàm này tạo ra một vùng đệm chứa con trỏ trỏ đến file có tên là fname cần mở. Và ppfile là con trỏ trỏ đến vùng bộ đệm đó. Tham số

mode quy định kiểu mở file; chẳng hạn OF_CREATE để tạo mới, OF_READ để đọc, OF_WRITE để ghi …. Tham số cuối dùng là NULL.

Trước khi đóng thư viện, bạn phải đóng file AVI đã mở, bằng cách dùng hàm:

AVIFileRelease(PAVIFILE pfile)

Trong đó, pfile là con trỏ trỏ đến file cần đóng.

Bƣớc 3:

Mở dòng dữ liệu hình ảnh hay âm thanh trong file AVI đã mở ra để thao tác:

AVIFileGetStream(PAVIFILE pfile, PAVISTREAM * ppavi, DWORD fccType, LONG lParam)

Trong đó, pfile là con trỏ đến file đã mở; ppavi trỏ đến dòng dữ liệu kết quả; fccType là loại dòng dữ liệu chọn để mở, là streamtypeAUDIO nếu là tiếng và streamtypeVIDEO nếu là hình,…lParam đếm số loại dòng được mở, là 0 nếu chỉ thao tác với một loại dòng dữ liệu.

Sau các thao tác với dòng dữ liệu này, bạn nhớ phải đóng nó lại:

AVIStreamRelease(PAVITREAM pavi).

Bƣớc 4: Trƣờng hợp thao tác với dữ liệu hình của phim Chuẩn bị cho thao tác với khung hình (frames):

AVIStreamGetFrameOpen(PAVISTREAMpavi,LPBITMAPINFOHEADER lpbiWanted)

Trong đó pavi trỏ đến dòng dữ liệu đã mở, lpbiWanted là con trỏ trỏ đến cấu trúc mong muốn của hình ảnh, ta dùng NULL để sử dụng cấu trúc mặc định. Hàm này trả về đối tượng có kiểu PGETFRAME để dùng cho bước 5.

Sau khi thao tác với các frame rồi, phải gọi hàm :

AVIStreamGetFrameClose(PGETFRAME pget)

Dùng hàm

AVIStreamGetFrame(PGETFRAME pget, LONG lpos)

Hàm này trả về con trỏ trỏ đến dữ liệu của frame thứ lpos. Dữ liệu đó có kiểu là DIB đã định khối. Thực hiện các thao tác mong muốn.

(adsbygoogle = window.adsbygoogle || []).push({});

Một phần của tài liệu đồ án tốt nghiệp nghiên cứu một số kỹ thuật xác định độ đo tương tự và ứng dụng (Trang 29 - 31)