This is an early example of how to integrate HornetsEye application in a Qt4 graphical user interface under GNU/Linux. The image is converted to a Qt::Pixmap object and then displayed using Qt::Label.
To use this application you need to install Qt4Ruby. You also need to compile the user interface description file first:
rbuic4 webcamwindow.ui > ui_webcamwindow.rb
You need to install qt4-qtruby-1.4.8 or later because earlier versions have a memory-leak in Qt::ByteArray.
#!/usr/bin/ruby
# Qt V4L webcam (requires Qt4-Ruby)
# http://developer.kde.org/language-bindings/ruby/tutorial/tutorial.html
require 'Qt4'
require 'hornetseye'
require 'ui_webcamwindow'
app=Qt::Application.new(ARGV)
class WebcamWindow < Qt::Dialog
slots 'open_camera()'
slots 'set_value(int)'
def initialize( parent = nil )
super( parent )
@ui = Ui::WebcamWindow.new
@ui.setupUi( self )
connect( @ui.reconnectButton, SIGNAL('clicked()'),
self, SLOT('open_camera()'))
connect( @ui.brightnessSlider, SIGNAL('valueChanged(int)'),
self, SLOT('set_value(int)'))
connect( @ui.hueSlider, SIGNAL('valueChanged(int)'),
self, SLOT('set_value(int)'))
connect( @ui.colourSlider, SIGNAL('valueChanged(int)'),
self, SLOT('set_value(int)'))
connect( @ui.contrastSlider, SIGNAL('valueChanged(int)'),
self, SLOT('set_value(int)'))
@timer = 0
open_camera
end
def open_camera
@ui.errorLabel.text = ""
begin
@input.close if @input != nil
@input = nil
@input = Hornetseye::V4LInput.new( @ui.deviceEdit.text )
@timer = startTimer( 0 ) if @timer == 0
rescue RuntimeError => e
@ui.errorLabel.text = e.to_s
@input = nil
end
@input
end
def set_value( value )
@input.set_sensivity( @ui.brightnessSlider.value,
@ui.hueSlider.value,
@ui.colourSlider.value,
@ui.contrastSlider.value ) if @input != nil
end
def timerEvent( e )
begin
raise "No input available" if @input == nil
str = @input.read.to_magick.to_blob {
self.format = "PPM"
self.depth = 8
}
pix = Qt::Pixmap.new
pix.loadFromData( Qt::ByteArray.fromRawData( str, str.size ) )
@ui.displayLabel.setPixmap( pix )
@ui.displayLabel.update
rescue RuntimeError => e
killTimer( @timer )
@timer = 0
end
end
end
win = WebcamWindow.new
win.show
app.exec