2010-02-16 39 views
6

Tôi đang làm việc trên một ứng dụng và tôi có một vấn đề tôi chỉ không thể tìm thấy một giải pháp cho. Ứng dụng này được viết bằng vC++. Những gì tôi cần làm là hiển thị một nguồn cấp dữ liệu video YUV với văn bản trên đầu trang của nó.Vẽ video với văn bản trên đầu trang

Ngay bây giờ, nó hoạt động chính xác bằng cách vẽ văn bản trong phương pháp OnPaint bằng GDI và video trên lớp phủ DirectDraw. Tôi cần phải loại bỏ lớp phủ vì nó gây ra nhiều vấn đề. Nó sẽ không hoạt động trên một số thẻ video, vista, 7, v.v.

Tôi không thể tìm ra cách để hoàn thành điều tương tự theo cách tương thích hơn. Tôi có thể vẽ video bằng cách sử dụng DirectDraw với một bộ đệm trở lại và sao chép nó vào bộ đệm chính tốt. Vấn đề ở đây là văn bản được vẽ trong GDI nhấp nháy do số lần video được làm mới. Tôi thực sự muốn giữ mã để vẽ văn bản nguyên vẹn nếu có thể vì nó hoạt động tốt.

Có cách nào để vẽ trực tiếp văn bản vào bộ đệm DirectDraw hoặc bộ nhớ đệm hay không và sau đó chuyển nó vào bộ đệm sau? Tôi có nên xem xét một phương pháp khác cùng nhau không? Hai hệ điều hành quan trọng là XP và 7. Nếu bất cứ ai có bất kỳ ý tưởng chỉ cho tôi biết và tôi sẽ kiểm tra chúng ra. Cảm ơn.

+0

+1 cho câu hỏi – gyurisc

Trả lời

2

Cố gắng nhìn vào DirectShow và mẫu Mã cổ phiếu trên microsoft.com:

DirectShow Ticker sample

Mẫu này sử dụng Video Trộn Renderer để pha trộn video và văn bản. Nó sử dụng giao diện IVMRMixerBitmap9 để trộn văn bản vào phần dưới cùng của cửa sổ video.

DirectShow là để xây dựng biểu đồ bộ lọc để phát lại luồng âm thanh hoặc video, thêm các bộ lọc khác nhau cho các hiệu ứng và thao tác khác nhau của các mẫu video và âm thanh.

1

Thay vì sử dụng Trình kết xuất video trộn của DirectShow, bạn cũng có thể sử dụng giao diện ISampleGrabber. Ưu điểm là, nó là một bộ lọc có thể được sử dụng với các trình kết xuất đồ họa khác, ví dụ như khi không hiển thị video trên màn hình nhưng phát trực tuyến trên mạng hoặc bán nó vào một tệp.

+1

Tuy nhiên, bất lợi của điều này là bạn đang tự pha trộn phần mềm và tắt phần cứng hỗ trợ giải mã hoặc hủy xen kẽ. Nếu bạn sử dụng apm bitmap của trình trộn vmr, bạn có thể sử dụng pha trộn alpha hỗ trợ phần cứng. –

+0

+1 cho ISampleGrabber, vì tôi sử dụng nó rộng rãi để vẽ cho video thời gian thực bằng .NET với GDI +. ngay cả trên bề mặt YUY2 :) –

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