paulo1205
(usa Ubuntu)
Enviado em 17/03/2020 - 07:14h
Bom dia, prezado.
Por razões históricas e por conta da natureza decentralizada do desenvolvimento de sistemas UNIX-like, não existe um <unix.h>, <linux.h> ou <ubuntu.h>. No mundo UNIX/POSIX, os arquivos de cabeçalho são divididos por assunto e por fornecedor, e você terá de incluir no seu programa tantos cabeçalhos quantos forem necessários para cobrir todas as funções que você empregar.
Existem múltiplas formas de capturar o conteúdo exibido pelo ambiente gráfico. Contudo, como existem diferentes ambiente gráficos, as opções que você terá em mãos vão depender daquilo que você tiver instalado e em uso na sua máquina, bem como do nível de abstração que você quiser utilizar. Por exemplo, se você quiser um nível de abstração baixo, haverá uma forma de fazer usando X11 e outra forma se você estiver usando Wayland. Subindo o nível de abstração, usar X11 ou Wayland pode não fazer diferença, mas você ainda terá múltiplas opções, tais como através de Qt, GTK+, FLTK etc.
Se você não quiser ter de ficar reescrevendo código para diferentes plataformas, subir o nível de abstração pode ser interessante. Se o utilizar o Qt, por exemplo, a forma de fazer a captura da tela não vai depender nem mesmo do sistema operacional: tanto no Windows quanto no Linux ou no OSX ou mesmo no Android, o código será rigorosamente o mesmo. Contudo, existe o preço a pagar, que é tamanho da biblioteca que suporta essas abstrações, e, eventualmente, algum custo, em tempo de execução, de mapear operações da lato nível e os dados por elas manipulados em operações nativas com seus respectivos tipos de dados, e vice-versa. Caso opte pelo maior nível de abstração, própria documentação do Qt tem como exemplo um programa de captura de tela para arquivo, que você provavelmente poderia adaptar para uso com o OpenCV (veja
https://doc.qt.io/qt-5/qtwidgets-desktop-screenshot-example.html).
Se quiser ou tiver de trabalhar em baixo nível, a forma de fazer com o X11/Xlib provavelmente envolverá o uso de
XGetImage() e de alguma função de conversão entre a representação empregada por essa função e o formato requerido pelas funções do OpenCV.
... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)