PDA

Visualizza la versione completa : [C] pixel


mhmh
10-10-2002, 17:09
Volevo sapere come posso disegnare un semplice pixel in C.
Grazie:metallica

r0x
10-10-2002, 19:49
Ehm, non ti sembra di essere stato un po` generico .. ? :quipy:

Piattaforma?

mhmh
11-10-2002, 10:54
pardon...DOS.Uso DevC++

r0x
12-10-2002, 15:53
Con Dev-C++ puoi fare solo programmi in emulazione DOS sotto Windows, quindi ti devi affidare o all'API, precisamente alla GDI (Graphics Device Interface), oppure a librerie conosciute come DirectX ed OpenGL; se invece vuoi direttamente programmare in DOS.. Dev-C++ non va bene, puoi usare Watcom o Turbo C/C++, e le procedure sono differenti.

Ciao.

akiross
12-10-2002, 18:40
Ummm... se vuoi, puoi utilizzare assembler (se lo sai).
Se nn mi sbgalio, dalla locazione 0400h puoi iniziare a scrivere sul bufefr della memoria video, e da li, gestisci la tua grafica.

r0x
13-10-2002, 00:54
Non da Windows, altrimenti *TAC* schermata blu... Quello lo puoi fare in DOS, segmento 0xA000 o A000h:0h (16-bit), o ancora 0xA0000 o A0000h (32-bit). E non serve per forza l`assembly, basta un puntatore far all`indirizzo nel caso di un puntatore a 16-bit o flat per quello a 32-bit... In soldoni:



unsigned char* memoria_video_16bit = MK_FP( 0xA0000, 0 );
unsigned char* memoria_video_32bit = ( unsigned char* ) 0xA0000;


Da quell`indirizzo in poi, per tutti i 64k del segmento, ogni byte (per risoluzioni a 256 colori) corrisponde ad un colore della paletta. Il buffer e` lineare, quindi 320x200 a 256 colori (mode 13h) occupano esattamente 64000 bytes. Per colorare un pixel basta assegnare un numero (colore) ad un byte indirizzato a partire da quel puntatore. Se vogliamo, il modo piu` semplice e` trattarlo come un array:



memoria_video_16bit[ 1284 ] = 4;


Colora il 1285 pixel di rosso (4 in genere), ed a 320x200 significa:

1285 / 320 = (4+1)^ = 5^ riga
1285 % 320 = (5+1)^ = 6^ colonna

La paletta la modifichi direttamente tramite le porte dell`adattatore VGA.

Questo indirizzo vale per le basse risoluzioni VGA in modalita` reale (16-bit) o protetta (32-bit) e per gli antiquati e iper-ostici Mode X (ARRRGH!). Se invece vuoi usare risoluzioni alte dovresti leggere un minimo sulle specifiche VBE (VESA) perche` il discorso e` un po` piu` articolato.

Ciao.

Loading