|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: May 2011
Città: Reggio Emilia
Messaggi: 17
|
[C Xlib] screenshot con XGetImage
Ciao a tutti,
Devo eseguire uno screenshot ciclicamente dell'immagine contenuta in una finestra X su linux, per poi processarla. Io ho risolto il problema utilizzando un tool (Imagemagik) che da riga di comando esegue lo screenshot e lo salva su disco in formato PNG, dopodichè il mio programma lo apre e lo processa. Diciamo che il tutto funziona ma è troppo lento, e soprattutto vorrei evitare il salvataggio del file su disco, ma processarlo direttamente. Per fare questo sono andato a spulciare la Xlib e ho trovato la funzione XGetImage(), che restituisce una XImage fornendo il display, la posizione, la dimensione della finestra e altri parametri. la parte di codice è: Codice:
Display *display = XOpenDisplay(NULL); Screen* screen = DefaultScreenDisplay(display); XImage* img = XGetImage (display, screen, x, y, width, height, AllPlanes, ZPixmap); Per darvi una idea, richiede almeno 5 secondi. Non ho capito bene gli ultimi 2 parametri, comunque qualcuno di voi sa dove sbaglio??? grazie a tutti |
|
|
|
|
|
#2 | ||
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Ciao, non sono certo un esperto, quindi tieni conto che c'è una concreta probabilità che io stia per sparare una cavolata, ma leggendo la documentazione della XOpenDisplay, qui:
Quote:
In tal caso potresti eseguirla solo in fase di start-up e memorizzare il riferimento al Display da usare ogni volta che ti serve. Quote:
Trovi tutto documentato qua.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 06-06-2011 alle 15:35. |
||
|
|
|
|
|
#3 | |
|
Junior Member
Iscritto dal: May 2011
Città: Reggio Emilia
Messaggi: 17
|
Quote:
Per quanto riguarda l'apertura della connessione, in realtà io faccio già come consigli tu (il codice postato era solo l'esempio della creazione delle variabili, ma le prime 2 istruzioni sono in start-up, mentre la terza nel ciclio). In ogni caso ho proprio identificato il ritardo nella funzione XGetImage. |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Puoi anche provare ad usare le API C/C++ di ImageMagick.
Con le API C++ puoi fare uno screenshot "leggendo" un file speciale : "x:" per lo schermo intero e "x:<window-id>" per la finestra con window-id <window-id>
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
|
|
|
|
#5 | |
|
Junior Member
Iscritto dal: May 2011
Città: Reggio Emilia
Messaggi: 17
|
Quote:
Ma quindi le API mi possono restituire un pointer allo screenshot in formato utile (Ximage, PNG, ....) direttamente in cache? |
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Quote:
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
|
|
|
|
|
#7 | |
|
Junior Member
Iscritto dal: May 2011
Città: Reggio Emilia
Messaggi: 17
|
Quote:
Farò sicuramente delle prove, grazie per il suggerimento. |
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
beh dovresti poter convertirlo in qualsiasi formato sempre con le API.
Cmq probabile che tu possa passare direttamente il formato raw
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:27.




















