Torna indietro   Hardware Upgrade Forum > Software > Programmazione

DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici
DJI porta un importante aggiornamento alla sua linea di gimbal camera tascabili con Osmo Pocket 4: sensore CMOS da 1 pollice rinnovato, gamma dinamica a 14 stop, profilo colore D-Log a 10 bit, slow motion a 4K/240fps e 107 GB di archiviazione integrata. Un prodotto pensato per i creator avanzati, ma che convince anche per l'uso quotidiano
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Il primo headset open-back della linea INZONE arriva a 200 euro con driver derivati dalle cuffie da studio MDR-MV1 e un peso record di soli 199 grammi
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA
Al .NEXT 2026 di Chicago, Nutanix ha mostrato quanto sia cambiata: una piattaforma software che gestisce VM, container e carichi di lavoro IA ovunque, dall’on-premise al cloud pubblico. Con un’esecuzione rapidissima sulle partnership e sulla migrazione da VMware
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 04-04-2008, 19:20   #1
-Slash
Senior Member
 
L'Avatar di -Slash
 
Iscritto dal: Mar 2006
Messaggi: 2516
[C++] Accendere pixel su linux

Ciao ragazzi

vorrei fare un programmino che una volta avviato accenda dei pixel che scelgo io fin quando non viene terminato...

questo su linux

solo che non ho la piu pallida idea di che libreria e che funzioni utilizzare

qualcuno saprebbe indicarmi la strada?
-Slash è offline   Rispondi citando il messaggio o parte di esso
Old 04-04-2008, 20:21   #2
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
io lo so fare su Windows
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 04-04-2008, 20:45   #3
vizzz
Senior Member
 
L'Avatar di vizzz
 
Iscritto dal: Mar 2006
Città: Bergamo
Messaggi: 2499
Quote:
Originariamente inviato da -Slash Guarda i messaggi
Ciao ragazzi

vorrei fare un programmino che una volta avviato accenda dei pixel che scelgo io fin quando non viene terminato...

questo su linux

solo che non ho la piu pallida idea di che libreria e che funzioni utilizzare

qualcuno saprebbe indicarmi la strada?
ma con X avviato?
senza far partire x potresti usare il frame buffer.
__________________
ho concluso con: kvegeta, doctordb, Leland Gaunt.
vizzz è offline   Rispondi citando il messaggio o parte di esso
Old 04-04-2008, 20:52   #4
arara
Senior Member
 
L'Avatar di arara
 
Iscritto dal: Aug 2007
Messaggi: 1270
oppure con X avviato puoi usare le xlib:
http://en.wikipedia.org/wiki/Xlib
arara è offline   Rispondi citando il messaggio o parte di esso
Old 04-04-2008, 21:00   #5
-Slash
Senior Member
 
L'Avatar di -Slash
 
Iscritto dal: Mar 2006
Messaggi: 2516
Quote:
Originariamente inviato da 71104 Guarda i messaggi
io lo so fare su Windows
beh se me lo dici sapere una cosa in piu non mi fa male
Quote:
Originariamente inviato da vizzz Guarda i messaggi
ma con X avviato?
senza far partire x potresti usare il frame buffer.
si con x avviato
Quote:
Originariamente inviato da arara Guarda i messaggi
oppure con X avviato puoi usare le xlib:
http://en.wikipedia.org/wiki/Xlib
potresti indicarmi la funziona da usare? perchè ce ne sono un casino e non riesco a capure quale fa al caso mio
-Slash è offline   Rispondi citando il messaggio o parte di esso
Old 04-04-2008, 21:10   #6
arara
Senior Member
 
L'Avatar di arara
 
Iscritto dal: Aug 2007
Messaggi: 1270
Quote:
Originariamente inviato da -Slash Guarda i messaggi
potresti indicarmi la funziona da usare? perchè ce ne sono un casino e non riesco a capure quale fa al caso mio
a dir il vero non le ho mai usate, ma leggendo il manual reference penso che dovrebbe essere XDrawPoint(display, drawable, gcontex, x, y).

http://tronche.com/gui/x/xlib/graphi...DrawPoint.html
arara è offline   Rispondi citando il messaggio o parte di esso
Old 04-04-2008, 22:05   #7
-Slash
Senior Member
 
L'Avatar di -Slash
 
Iscritto dal: Mar 2006
Messaggi: 2516
Quote:
Originariamente inviato da arara Guarda i messaggi
a dir il vero non le ho mai usate, ma leggendo il manual reference penso che dovrebbe essere XDrawPoint(display, drawable, gcontex, x, y).

http://tronche.com/gui/x/xlib/graphi...DrawPoint.html
ok, si dovrebbe fare al caso mio...

guardandone pero una simile forse mi semplifica ancora piu le cose perchè dovrei in realtà fare un paio di linee rosse sullo schermo...

http://www.tronche.com/gui/x/xlib/gr...XDrawLine.html

Codice:
XDrawLine(display, d, gc, x1, y1, x2, y2)
ma non capisco cosa devo passare a parte le coordinate e come...

cioe a display, d, gc cosa devo passare? io devo semplicemente dare le coordinate ed il colore rosso oppure a scelta dell'utente...

penso che a display debba passare il numero del display, poi gc è di tipo struct ma ha tantissimi parametri a sua volta
-Slash è offline   Rispondi citando il messaggio o parte di esso
Old 04-04-2008, 22:24   #8
arara
Senior Member
 
L'Avatar di arara
 
Iscritto dal: Aug 2007
Messaggi: 1270
Guardando gli esempi dovrebbe venire cosi:

Display *display = XOpenDisplay(NULL);
int screen = DefaultScreen(display);
Window window = XCreateSimpleWindow(display, RootWindow(display, screen), 1, 1, 640, 480, 1, BlackPixel(display, screen), WhitePixel(display, screen));
XDrawLine(display, window, DefaultGC(display, screen), 50, 50, 100,100);

prova a guardare questo tutorial:
http://tronche.com/gui/x/xlib-tutorial/
arara è offline   Rispondi citando il messaggio o parte di esso
Old 05-04-2008, 09:55   #9
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da -Slash Guarda i messaggi
beh se me lo dici sapere una cosa in piu non mi fa male
banalisssssimo: http://msdn2.microsoft.com/en-us/library/ms532304.aspx
come DC (primo parametro) basta che usi quello che ottieni dalla chiamata GetDC(NULL), che sarebbe quello associato allo schermo:
http://msdn2.microsoft.com/en-us/library/ms533241.aspx
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 06-04-2008, 23:19   #10
-Slash
Senior Member
 
L'Avatar di -Slash
 
Iscritto dal: Mar 2006
Messaggi: 2516
ok grazie ad entrambi...

su linux devo vedere con calma il nome del pacchetto da installare su ubuntu

su windows invece ho fatto cosi

Codice:
#include <windows.h>
[...]

SetPixel( GetDC(NULL), i, j, RGB(255,0,0) );
ma eclipse cdt mi da errore: undefined reference to 'SetPixel@16'

penso cio sia dovuto ad una mancata lettura corretta da parte del linker di windows.h o qualcosa del genere, e presuppongo che debba passare qualche cosa al linker ma non saprei neanche come fare

lo stesso errore lo da anche code::blocks... come risolvo ?
-Slash è offline   Rispondi citando il messaggio o parte di esso
Old 06-04-2008, 23:36   #11
-Slash
Senior Member
 
L'Avatar di -Slash
 
Iscritto dal: Mar 2006
Messaggi: 2516
doppio, scusate
-Slash è offline   Rispondi citando il messaggio o parte di esso
Old 07-04-2008, 08:17   #12
-Slash
Senior Member
 
L'Avatar di -Slash
 
Iscritto dal: Mar 2006
Messaggi: 2516
su windows sono riuscito a compilarlo con code::blocks creando un nuovo progetto: applicazione grafica win32... su eclipse non ho ancora capito come fare e sono in attesa di delucidazioni.

con code::blocks sono riuscito a compilarlo, ma innanzi tutto mi crea un eseguibile di 1.3 mb che mi sembra un pochino tanto per il codice che ho scritto poi appena avviato si rallenta tutto in una maniera indicibile...

Codice:
#include <iostream>
#include <cstdlib>
#include <windows.h>

using namespace std;

int main(int argc, char* argv[]) {
	int width = 1280,
		height = 800,
		size = 10;

    if( argc == 3) {
        width = atol(argv[1]);
		height = atol(argv[2]);
		size = atol(argv[3]);
        }
    while(1) {
	for(int i = width/2 - size; i <= width/2 + size; i++ )
		SetPixel( GetDC(NULL), i, height/2, RGB(255,0,0) );

	for(int j = height/2 - size; j <= height/2 + size; j++ )
		SetPixel( GetDC(NULL), width/2, j, RGB(255,0,0) );
    }

	system("PAUSE");
	return 0;

}
se non metto il while(1) prima dei due for mi appaiono i pixel per un secondo e poi l'applicazione si chiude, io invece vorrei rimanessero sempre fin quando io non chiudo l'applicazione, come fa ora insomma, ma senza rallentare in questo modo il sistema e creando se possibile un eseguibile piu piccolo

Ultima modifica di -Slash : 07-04-2008 alle 15:04.
-Slash è offline   Rispondi citando il messaggio o parte di esso
Old 07-04-2008, 08:49   #13
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da -Slash Guarda i messaggi
se non metto il while(1) prima dei due for mi appaiono i pixel per un secondo e poi l'applicazione si chiude, io invece vorrei rimanessero sempre fin quando io non chiudo l'applicazione, come fa ora insomma, ma senza rallentare in questo modo il sistema e creando se possibile un eseguibile piu piccolo
Bhe, quel while infinito contenente due cicli for ti va un pochino a monopolizzare la CPU, ci vorrebbe uno sleep di 1 microsec.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 07-04-2008, 15:34   #14
-Slash
Senior Member
 
L'Avatar di -Slash
 
Iscritto dal: Mar 2006
Messaggi: 2516
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Bhe, quel while infinito contenente due cicli for ti va un pochino a monopolizzare la CPU, ci vorrebbe uno sleep di 1 microsec.
ho messo uno Sleep(250) precedentemente, perchè solo a partire da quel numero riesco ad abbassare un po' la cpu portandola a 11-14%, aumentando troppo poi si vede...

ma mi sembra ancora troppo, e credo ci sia un modo migliore, perchè ho scaricato un altro programma che fa la stessa cosa e prende lo 0% di cpu
-Slash è offline   Rispondi citando il messaggio o parte di esso
Old 07-04-2008, 18:49   #15
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Slash, potevi dirlo prima che volevi colorare una linea e non solo un pixel
colorare un pixel alla volta a suon di SetPixel è estremamente inefficiente perché ciascuna SetPixel richiede uno switch in kernel mode e un bel po' di altre operazioni (tipo la mappatura dei colori di sistema se per caso il colore che gli hai dato è un colore di sistema) per poi alla fine... settare pochi bytes
tutto quel popo' di operazioni puoi farlo solo O(1) volte anziché O(N) volte (N lunghezza della linea in pixels) usando le funzioni MoveToEx e LineTo:
http://msdn2.microsoft.com/en-us/lib...47(VS.85).aspx
http://msdn2.microsoft.com/en-us/lib...56(VS.85).aspx

inoltre non serve che cerchi il DC ogni volta: chiama GetDC una volta sola, salvati l'HDC e usalo per le chiamate seguenti.

per quanto riguarda le dimensioni dell'eseguibile, ad ingigantirle oltremodo è il codice di inizializzazione del runtime del C++ che la maggior parte dei compilatori del mondo includono automaticamente (pensa ad esempio al costruttore dell'oggetto cout, oggetto che è sempre presente in un programma C++; questo è solo un esempio).

per rimuovere tale codice (una volta che sei sicuro che non lo userai mai, ma ti consiglierei di lasciarlo) devi cercare tra le opzioni della linea di comando del MinGW.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 07-04-2008, 23:46   #16
-Slash
Senior Member
 
L'Avatar di -Slash
 
Iscritto dal: Mar 2006
Messaggi: 2516
ok grazie, ho modificato usando le due funzioni e seguendo l'esempio sul sito msdn...

ma non esce niente
Codice:
#define WINVER 0x0501
#include <iostream>
#include <cstdlib>
#include <windows.h>

using namespace std;

int main(int argc, char* argv[]) {
	int width = 1280,
		height = 800,
		size = 10;

    if( argc == 3) {
        width = atol(argv[1]);
		height = atol(argv[2]);
		size = atol(argv[3]);
        }
    HDC hdc;
    HWND hwnd;

    hdc = GetDC(hwnd);
    while(1) {
        MoveToEx(hdc,  (width/2) - 10,  height/2, NULL);
        LineTo(hdc, (width/2) + 10,  height/2);
        MoveToEx(hdc,  width/2, (height/2) - 10, NULL);
        LineTo(hdc, width/2,  (height/2) + 10);
    }

    ReleaseDC(hwnd, hdc);

	system("PAUSE");

	return 0;

}
anche sostituendo hwnd con null

e poi non ho capito come passo il colore

Ultima modifica di -Slash : 07-04-2008 alle 23:51.
-Slash è offline   Rispondi citando il messaggio o parte di esso
Old 08-04-2008, 13:27   #17
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
sostituendo hwnd con NULL a me funziona perfettamente...
per passare il colore a questo punto devi usare un oggetto Pen; lo crei con CreatePen e lo imposti del DC con SelectObject:
http://msdn2.microsoft.com/en-us/library/ms535467.aspx
http://msdn2.microsoft.com/en-us/lib...72(VS.85).aspx

alla fine ricordati di deselezionarlo (sempre con SelectObject) e di distruggerlo con DeleteObject:
http://msdn2.microsoft.com/en-us/library/ms533225.aspx

Ultima modifica di 71104 : 08-04-2008 alle 13:30.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 08-04-2008, 13:36   #18
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
rettifico il mio post precedente: ho scoperto questa utile funzione:
http://msdn2.microsoft.com/en-us/lib...37(VS.85).aspx

grazie ad essa non ti serve di creare un nuovo oggetto Pen; inoltre chiarisco meglio un punto: SelectObject non offre un modo per deselezionare un oggetto, ma semplicemente per selezionarne un altro al posto suo (cosa che provoca la "deselezione" del primo).
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 08-04-2008, 15:47   #19
-Slash
Senior Member
 
L'Avatar di -Slash
 
Iscritto dal: Mar 2006
Messaggi: 2516
in effetti funziona, evidentemente si era incantato prima, perchè non funzionava

l'unica cosa che non va è il colore, il codice è il seguente ma è sempre nero... perdonami per la mia stoltezza

Codice:
#define WINVER 0x0501
#include <iostream>
#include <cstdlib>
#include <windows.h>

using namespace std;

int main(int argc, char* argv[]) {
	int width = 1280,
		height = 800,
		size = 10;

    if( argc == 3) {
        width = atol(argv[1]);
		height = atol(argv[2]);
		size = atol(argv[3]);
        }

    HDC hdc;
    hdc = GetDC(NULL);

    SetDCPenColor(hdc,RGB(255, 0, 0));
    while(1) {
        Sleep(1);
        MoveToEx(hdc,  (width/2) - (size/2),  height/2, NULL);
        LineTo(hdc, (width/2) + 1 + (size/2),  height/2);
        MoveToEx(hdc,  width/2, (height/2) - (size/2), NULL);
        LineTo(hdc, width/2,  (height/2) + 1 + (size/2));
    }

    ReleaseDC(NULL, hdc);

	system("PAUSE");

	return 0;

}
poi non ho capito bene il fatto della riduzione della dimensione...

grazie per la pazienza, poi dopo spero di riuscirlo a fare su linux
-Slash è offline   Rispondi citando il messaggio o parte di esso
Old 08-04-2008, 16:10   #20
vizzz
Senior Member
 
L'Avatar di vizzz
 
Iscritto dal: Mar 2006
Città: Bergamo
Messaggi: 2499
Codice:
SetDCPenColor(hdc,RGB(255, 0, 0));
__________________
ho concluso con: kvegeta, doctordb, Leland Gaunt.
vizzz è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici DJI Osmo Pocket 4: la gimbal camera tascabile cr...
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori Sony INZONE H6 Air: il primo headset open-back d...
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA Nutanix cambia pelle: dall’iperconvergenza alla ...
Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta Recensione Xiaomi Pad 8 Pro: potenza bruta e Hyp...
NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abb...
La NASA ha confermato il supporto per il...
Sierra Space ha completato il test acust...
Ryzen 7 5800X3D pronto a tornare sul mer...
NASA: l'amministrazione Trump prosegue s...
L'Iran avrebbe acquistato un satellite p...
VivaTech compie dieci anni e raddoppia p...
Le vendite di CPU si sono ridotte di 25 ...
Starship: SpaceX ha completato lo static...
Huawei FusionSolar Roadshow 2026: l'inno...
Nuovo trailer per Street Fighter: un fil...
Sovranità sui dati: arriva la pri...
Schede video NVIDIA e AMD di nuovo su Ma...
Robot aspirapolvere, TV OLED, iPhone 17 ...
EUREKA J15 Pro Ultra super interessante ...
Intel porta l'AI nei notebook entry-leve...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 23:42.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v