Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70 porta il concetto di smartphone ultrasottile su un terreno più concreto e accessibile: abbina uno spessore sotto i 6 mm a una batteria di capacità relativamente elevata, un display pOLED da 6,7 pollici e un comparto fotografico triplo da 50 MP. Non punta ai record di potenza, ma si configura come alternativa più pragmatica rispetto ai modelli sottili più costosi di Samsung e Apple
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026
Sono molte le novità che ASUS ha scelto di presentare al CES 2026 di Las Vegas, partendo da una gamma di soluzioni NUC con varie opzioni di processore passando sino agli schermi gaming con tecnologia OLED. Il tutto senza dimenticare le periferiche di input della gamma ROG e le soluzioni legate alla connettività domestica
Le novità ASUS per il 2026 nel settore dei PC desktop
Le novità ASUS per il 2026 nel settore dei PC desktop
Molte le novità anticipate da ASUS per il 2026 al CES di Las Vegas: da schede madri per processori AMD Ryzen top di gamma a chassis e ventole, passando per i kit di raffreddamento all in one integrati sino a una nuova scheda video GeForce RTX 5090. In sottofondo il tema dell'intelligenza artificiale con una workstation molto potente per installazioni non in datacenter
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 04-04-2008, 20: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, 21: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, 21: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, 21: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, 22: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, 22: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, 23: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, 23: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, 10: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 07-04-2008, 00: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 07-04-2008, 00: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, 09: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 16:04.
-Slash è offline   Rispondi citando il messaggio o parte di esso
Old 07-04-2008, 09: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, 16: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, 19: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 08-04-2008, 00: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 : 08-04-2008 alle 00:51.
-Slash è offline   Rispondi citando il messaggio o parte di esso
Old 08-04-2008, 14: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 14:30.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 08-04-2008, 14: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, 16: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, 17: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


Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
Le novità ASUS per il 2026 nel settore dei PC desktop Le novità ASUS per il 2026 nel settore de...
Le novità MSI del 2026 per i videogiocatori Le novità MSI del 2026 per i videogiocato...
I nuovi schermi QD-OLED di quinta generazione di MSI, per i gamers I nuovi schermi QD-OLED di quinta generazione di...
E-mail reset password di Instagram: la c...
La NASA ha discusso le problematiche del...
Il razzo spaziale NASA SLS e la capsula ...
Stazione Spaziale Internazionale: Crew-1...
Samsung Galaxy S26 Ultra: la ricarica de...
Apple ha un nuovo partner per la sua App...
Trenitalia introduce il prezzo dinamico ...
OnePlus non si ferma più: c'&egra...
DAZN sconta il piano Full per 6 mesi, se...
L'uso dell'IA nei giochi è cancer...
Meta punta sul nucleare USA per alimenta...
Le migliori offerte Amazon del weekend: ...
La crisi dell'hardware spinge i negozi g...
Apple Watch SE 3 scontato su Amazon: il ...
Robot aspirapolvere davvero scontati: si...
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: 08:15.


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