Tôi đang phát triển ứng dụng sẽ nhận hình ảnh từ thiết bị camera và hiển thị chúng trong cửa sổ GTK.C, GTK: hiển thị luồng hình ảnh RGB ở <60 khung hình/giây
Máy ảnh cung cấp hình ảnh RGB thô (3 byte cho mỗi pixel, không có kênh alpha, kích thước cố định) ở tốc độ khung hình khác nhau (1-50 khung hình/giây).
Tôi đã thực hiện tất cả nội dung phần cứng đó và hiện có chức năng gọi lại được gọi với mọi hình ảnh mới được máy ảnh chụp.
Cách dễ nhất nhưng đủ nhanh để hiển thị những hình ảnh đó trong cửa sổ của tôi là gì?
Dưới đây là những gì tôi đã cố gắng:
sử dụng
gdk_draw_rgb_image()
trên một diện tích vẽ gtk: về cơ bản làm việc, nhưng render quá chậm rằng các quá trình vẽ chồng chéo và các ứng dụng bị rơi sau vài khung hình đầu tiên, ngay cả ở tốc độ chụp 1 fps.phân bổ một GdkPixbuf cho mỗi khung mới và gọi
gtk_image_set_from_pixbuf()
trên một widget ảnh gtk: chỉ hiển thị frame đầu tiên, sau đó tôi thấy không có sự thay đổi trong cửa sổ. Có thể là một lỗi trong mã của tôi, nhưng không biết nếu nó sẽ đủ nhanh.sử dụng Cairo (
cairo_set_source_surface()
, sau đócairo_paint()
): có vẻ khá nhanh, nhưng hình ảnh trông có vẻ sọc, không biết nếu định dạng hình ảnh tương thích.
Hiện tại tôi đang nghĩ về việc thử một thứ gì đó như gstreamer và xử lý những hình ảnh đó như luồng video, nhưng tôi không chắc liệu đây có phải là quá mức cần thiết cho cơ chế đơn giản của tôi hay không.
Cảm ơn trước vì lời khuyên nào!
Cairo xác định pixel bề mặt hình ảnh CAIRO_FORMAT_RGB24 của nó theo 32 bit, do đó trong bộ nhớ trên một máy cuối nhỏ, pixel sẽ là BGR0BGR0, có thể bạn đang sử dụng ngược lại hoặc không đặt trong 0 byte, do đó tước. – ergosys
@lynix Tôi cần viết mã giống nhau. Bạn có thể chia sẻ cách cairo để nhận nguồn cấp dữ liệu webcam không? – inckka
@inckka: Đã 4 năm kể từ đó, và câu hỏi của bạn quá chung chung đối với bất kỳ ai để cung cấp cho bạn câu trả lời chính xác. Vấn đề cụ thể của tôi đã được giải quyết [theo cách này] (http://pastebin.com/QMCgaaUT). – lynix