Differenze tra le versioni di "Individuare il colore di un determinato pixel"
(8 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 3: | Riga 3: | ||
==Uso delle sole risorse di Gambas== | ==Uso delle sole risorse di Gambas== | ||
− | Volendo utilizzare le sole | + | Volendo utilizzare le sole risorse di Gambas, si potranno adottare un paio di modalità. |
− | + | ||
+ | ===Individuare le coordinate del pixel mediante la Classe "Image"=== | ||
+ | Si potrà individuare il pixel dell'immagine impostando le sue coordinate x,y con la Classe "Image". | ||
+ | Public Sub Button1_Click() | ||
Dim im As Image | Dim im As Image | ||
Dim nCol As Integer | Dim nCol As Integer | ||
− | im = Image.Load("<FONT color= | + | im = Image.Load("<FONT color=darkgreen>''/percorso/del/file/immagine''</font>") |
<FONT color=gray>' ''Individueremo il pixel dell'immagine mediante le sue coordinate x ed y (che ovviamente dovranno essere specificate):''</font> | <FONT color=gray>' ''Individueremo il pixel dell'immagine mediante le sue coordinate x ed y (che ovviamente dovranno essere specificate):''</font> | ||
Riga 16: | Riga 19: | ||
Print "Il numero decimale del colore del pixel è: "; nCol, "&h"; Hex(nCol, 8) | Print "Il numero decimale del colore del pixel è: "; nCol, "&h"; Hex(nCol, 8) | ||
− | + | End | |
Verrà restituito il numero decimale del colore del pixel, determinato dalle coordinate ''x'' ed ''y'' all'interno dell'immagine. | Verrà restituito il numero decimale del colore del pixel, determinato dalle coordinate ''x'' ed ''y'' all'interno dell'immagine. | ||
− | |||
===Individuare il colore di un pixel di un'immagine cliccandoci sopra con il mouse=== | ===Individuare il colore di un pixel di un'immagine cliccandoci sopra con il mouse=== | ||
Mostriamo un esempio nel quale, cliccando su un'immagine inserita in una ''PictureBox'', viene mostrato in una ''TextLabel'' il colore del pixel, nonché in console il corrispondente numero: | Mostriamo un esempio nel quale, cliccando su un'immagine inserita in una ''PictureBox'', viene mostrato in una ''TextLabel'' il colore del pixel, nonché in console il corrispondente numero: | ||
Private im As Image | Private im As Image | ||
+ | Private PictureBox1 As PictureBox | ||
+ | Private label1 As Label | ||
− | + | Public Sub Form_Open() | |
<FONT color=gray>' ''Carichiamo l'immagine in una variabile di tipo "Image":''</font> | <FONT color=gray>' ''Carichiamo l'immagine in una variabile di tipo "Image":''</font> | ||
− | im = Image.Load("<FONT color= | + | im = Image.Load("<FONT color=darkgreen>''/percorso/del/file/immagine''</font>") |
− | <FONT color=gray>' ''Rendiamo la "PictureBox" delle medesime dimensioni | + | With Me |
+ | .W = im.W | ||
+ | .H = im.H + 50 | ||
+ | .Center | ||
+ | End With | ||
+ | <FONT color=gray>' ''Rendiamo la "PictureBox" delle medesime dimensioni del "Form" principale:''</font> | ||
With PictureBox1 | With PictureBox1 | ||
+ | .X = 0 | ||
+ | .Y = 0 | ||
.W = im.W | .W = im.W | ||
.H = im.H | .H = im.H | ||
− | |||
.Image = im | .Image = im | ||
End With | End With | ||
+ | With label1 = New Label(Me) | ||
+ | .X = 0 | ||
+ | .Y = PictureBox1.H + 10 | ||
+ | .W = Me.W | ||
+ | .H = 35 | ||
+ | End With | ||
+ | |||
+ | End | ||
− | |||
− | + | Public Sub PictureBox1_MouseDown() | |
Dim nCol As Integer | Dim nCol As Integer | ||
<FONT color=gray>' ''Individuiamo le coordinate x ed y del puntatore del mouse, quando clicchiamo nella "PictureBox" sull'immagine:''</font> | <FONT color=gray>' ''Individuiamo le coordinate x ed y del puntatore del mouse, quando clicchiamo nella "PictureBox" sull'immagine:''</font> | ||
− | + | nCol = im[Mouse.X, Mouse.Y] | |
− | + | ||
− | |||
− | |||
<FONT color=gray>' ''Quindi otteniamo il numero del colore del pixel cliccato con il mouse...''</font> | <FONT color=gray>' ''Quindi otteniamo il numero del colore del pixel cliccato con il mouse...''</font> | ||
Print "Il numero del colore del pixel cliccato è: "; nCol, "&h"; Hex(nCol, 8) | Print "Il numero del colore del pixel cliccato è: "; nCol, "&h"; Hex(nCol, 8) | ||
− | <FONT color=gray>' ''... | + | <FONT color=gray>' ''...e mostriamo il suo colore nella "Label" posta sul Form:''</font> |
− | + | Label1.Background = nCol | |
− | + | End | |
Riga 61: | Riga 76: | ||
Si potranno anche utilizzare le risorse del API di ''GD''. | Si potranno anche utilizzare le risorse del API di ''GD''. | ||
− | Per poter fruire in Gambas delle risorse della libreria ''GD'', è necessario installare e richiamare la libreria | + | Per poter fruire in Gambas delle risorse della libreria ''GD'', è necessario installare e richiamare la libreria condivisa: "''libgd.so.3.0.11'' ". |
− | |||
Mostriamo un semplice esempio: | Mostriamo un semplice esempio: | ||
− | Library "<FONT Color=darkorange>libgd:3.0. | + | Library "<FONT Color=darkorange>libgd:3.0.11</font>" |
− | <FONT Color=gray>' ''gdImagePtr | + | <FONT Color=gray>' ''gdImagePtr gdImageCreateFromFile (const char *filename)'' |
− | ' '' | + | ' ''Read an image file of any supported.''</font> |
− | Private Extern | + | Private Extern gdImageCreateFromFile(filename As String) As Pointer |
− | <FONT Color=gray>' ''int | + | <FONT Color=gray>' ''int gdImageGetTrueColorPixel (gdImagePtr im, int x, int y)'' |
− | Private Extern | + | ' ''Gets a pixel color always as truecolor value.''</font> |
+ | Private Extern gdImageGetTrueColorPixel(im As Pointer, x As Integer, y As Integer) As Integer | ||
<FONT Color=gray>' ''void gdImageDestroy (gdImagePtr im)''</font> | <FONT Color=gray>' ''void gdImageDestroy (gdImagePtr im)''</font> | ||
Riga 78: | Riga 93: | ||
− | + | Public Sub Main() | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | Dim | + | Dim imago as Pointer |
Dim i As Integer | Dim i As Integer | ||
− | + | ||
− | + | imago = gdImageCreateFromFile("<FONT Color=darkgreen>''/percorso/del/file/immagine''</font>") | |
− | + | If imago == 0 Then Error.Raise("Errore !") | |
− | imago = | ||
<FONT Color=gray>' ''Individua il pixel ad esempio alle coordinate x=20, y=20 dell'immagine:''</font> | <FONT Color=gray>' ''Individua il pixel ad esempio alle coordinate x=20, y=20 dell'immagine:''</font> | ||
Riga 104: | Riga 107: | ||
<FONT Color=gray>' ''Va in chiusura:''</font> | <FONT Color=gray>' ''Va in chiusura:''</font> | ||
− | |||
gdImageDestroy(imago) | gdImageDestroy(imago) | ||
− | + | End | |
+ | Vedere: https://libgd.github.io/manuals/2.3.0/files/preamble-txt.html | ||
Riga 113: | Riga 116: | ||
Si potrà fare uso anche delle risorse del API del sistema SDL | Si potrà fare uso anche delle risorse del API del sistema SDL | ||
− | Per poter fruire in Gambas delle risorse di ''SDL'', è necessario installare e richiamare le seguenti librerie | + | Per poter fruire in Gambas delle risorse di ''SDL'', è necessario installare e richiamare le seguenti librerie condivise: |
− | * "''libSDL2-2.0.so.0. | + | * "''libSDL2-2.0.so.0.3000.3'' " |
− | * "''libSDL2_image-2.0.so.0.2 | + | * "''libSDL2_image-2.0.so.0.800.2'' " |
Mostriamo un semplice esempio: | Mostriamo un semplice esempio: | ||
− | Library "<FONT Color= | + | Library "<FONT Color=red>libSDL2-2.0:0.3000.3</font>" |
Public Struct SDL_Rect | Public Struct SDL_Rect | ||
Riga 174: | Riga 177: | ||
− | Library "<FONT Color=blue>libSDL2_image-2.0:0.2 | + | Library "<FONT Color=blue>libSDL2_image-2.0:0.800.2"</font> |
<FONT Color=gray>' ''SDL_Surface * IMG_Load(const char *file)'' | <FONT Color=gray>' ''SDL_Surface * IMG_Load(const char *file)'' | ||
Riga 181: | Riga 184: | ||
− | + | Public Sub Main() | |
Dim x, y As Integer | Dim x, y As Integer | ||
Riga 191: | Riga 194: | ||
SDL_Init(SDL_INIT_VIDEO) | SDL_Init(SDL_INIT_VIDEO) | ||
− | imago = IMG_Load("<FONT Color= | + | imago = IMG_Load("<FONT Color=darkgreen>''/percorso/del/file/immagine''</font>") |
If IsNull(imago) Then Error.Raise("Errore nel caricamento del file immagine!") | If IsNull(imago) Then Error.Raise("Errore nel caricamento del file immagine!") | ||
Riga 197: | Riga 200: | ||
Print "Formato immagine: "; pxfmt.BitsPerPixel; " bit per pixel" | Print "Formato immagine: "; pxfmt.BitsPerPixel; " bit per pixel" | ||
− | <FONT Color=gray>' '' | + | <FONT Color=gray>' ''Imposta un pixel, di cui conoscere i colori RGBA costituenti:''</font> |
x = 100 | x = 100 | ||
y = 39 | y = 39 | ||
− | + | ||
dati = imago.pixels | dati = imago.pixels | ||
− | dati += 4 * (x + imago.w * y) | + | dati += (pxfmt.BitsPerPixel \ 4) * (x + imago.w * y) |
− | + | ||
+ | Print Hex(Int@(dati), 8) | ||
r = Byte@(dati) | r = Byte@(dati) | ||
g = Byte@(dati + 1) | g = Byte@(dati + 1) | ||
Riga 209: | Riga 213: | ||
a = Byte@(dati + 3) | a = Byte@(dati + 3) | ||
Print "r: "; Hex(r, 2); "\ng: "; Hex(g, 2); "\nb: "; Hex(b, 2); "\na: "; Hex(a, 2); | Print "r: "; Hex(r, 2); "\ng: "; Hex(g, 2); "\nb: "; Hex(b, 2); "\na: "; Hex(a, 2); | ||
− | + | ||
SDL_Quit() | SDL_Quit() | ||
− | + | End | |
=Note= | =Note= | ||
− | [1] Per analogia di argomento si segnala anche [[ | + | [1] Per analogia di argomento si segnala anche: [[Individuare i colori dei pixel di una immagine]]. |
Versione attuale delle 07:49, 11 giu 2024
Mostriamo di seguito un paio di modalità per individuare il colore di un determinato pixel di un'immagine.
Indice
Uso delle sole risorse di Gambas
Volendo utilizzare le sole risorse di Gambas, si potranno adottare un paio di modalità.
Individuare le coordinate del pixel mediante la Classe "Image"
Si potrà individuare il pixel dell'immagine impostando le sue coordinate x,y con la Classe "Image".
Public Sub Button1_Click() Dim im As Image Dim nCol As Integer im = Image.Load("/percorso/del/file/immagine") ' Individueremo il pixel dell'immagine mediante le sue coordinate x ed y (che ovviamente dovranno essere specificate): nCol = im[x, y] Print "Il numero decimale del colore del pixel è: "; nCol, "&h"; Hex(nCol, 8) End
Verrà restituito il numero decimale del colore del pixel, determinato dalle coordinate x ed y all'interno dell'immagine.
Individuare il colore di un pixel di un'immagine cliccandoci sopra con il mouse
Mostriamo un esempio nel quale, cliccando su un'immagine inserita in una PictureBox, viene mostrato in una TextLabel il colore del pixel, nonché in console il corrispondente numero:
Private im As Image Private PictureBox1 As PictureBox Private label1 As Label Public Sub Form_Open() ' Carichiamo l'immagine in una variabile di tipo "Image": im = Image.Load("/percorso/del/file/immagine") With Me .W = im.W .H = im.H + 50 .Center End With ' Rendiamo la "PictureBox" delle medesime dimensioni del "Form" principale: With PictureBox1 .X = 0 .Y = 0 .W = im.W .H = im.H .Image = im End With With label1 = New Label(Me) .X = 0 .Y = PictureBox1.H + 10 .W = Me.W .H = 35 End With End Public Sub PictureBox1_MouseDown() Dim nCol As Integer ' Individuiamo le coordinate x ed y del puntatore del mouse, quando clicchiamo nella "PictureBox" sull'immagine: nCol = im[Mouse.X, Mouse.Y] ' Quindi otteniamo il numero del colore del pixel cliccato con il mouse... Print "Il numero del colore del pixel cliccato è: "; nCol, "&h"; Hex(nCol, 8) ' ...e mostriamo il suo colore nella "Label" posta sul Form: Label1.Background = nCol End
Uso delle risorse della libreria Libgd
Si potranno anche utilizzare le risorse del API di GD.
Per poter fruire in Gambas delle risorse della libreria GD, è necessario installare e richiamare la libreria condivisa: "libgd.so.3.0.11 ".
Mostriamo un semplice esempio:
Library "libgd:3.0.11" ' gdImagePtr gdImageCreateFromFile (const char *filename) ' Read an image file of any supported. Private Extern gdImageCreateFromFile(filename As String) As Pointer ' int gdImageGetTrueColorPixel (gdImagePtr im, int x, int y) ' Gets a pixel color always as truecolor value. Private Extern gdImageGetTrueColorPixel(im As Pointer, x As Integer, y As Integer) As Integer ' void gdImageDestroy (gdImagePtr im) Private Extern gdImageDestroy(im As Pointer) Public Sub Main() Dim imago as Pointer Dim i As Integer imago = gdImageCreateFromFile("/percorso/del/file/immagine") If imago == 0 Then Error.Raise("Errore !") ' Individua il pixel ad esempio alle coordinate x=20, y=20 dell'immagine: i = gdImageGetPixel(imago, 20, 20) Print "Il colore del pixel è: "; Hex(i, 6) ' Va in chiusura: gdImageDestroy(imago) End
Vedere: https://libgd.github.io/manuals/2.3.0/files/preamble-txt.html
Uso delle risorse della libreria SDL2
Si potrà fare uso anche delle risorse del API del sistema SDL
Per poter fruire in Gambas delle risorse di SDL, è necessario installare e richiamare le seguenti librerie condivise:
- "libSDL2-2.0.so.0.3000.3 "
- "libSDL2_image-2.0.so.0.800.2 "
Mostriamo un semplice esempio:
Library "libSDL2-2.0:0.3000.3" Public Struct SDL_Rect x As Integer y As Integer w As Integer h As Integer End Struct Public Struct SDL_Surface flags As Integer format As Pointer w As Integer h As Integer pitch As Integer pixels As Pointer userdata As Pointer locked As Integer lock_data As Pointer clip_rect As Struct SDL_Rect map As Pointer refcount As Integer End Struct Public Struct SDL_PixelFormat format As Integer palette As Pointer BitsPerPixel As Byte BytesPerPixel As Byte Rmask As Integer Gmask As Integer BMask As Integer AMask As Integer Rloss As Byte Gloss As Byte Bloss As Byte Aloss As Byte Rshift As Byte Gshift As Byte Bshift As Byte Ashift As Byte refcount As Integer next_ As Pointer End Struct Private Const SDL_INIT_VIDEO As Integer = 32 ' int SDL_Init(Uint32 flags) ' Initializes the SDL library. Private Extern SDL_Init(flags As Integer) As Integer ' void SDL_Quit(void) ' Clean up all initialized subsystems. Private Extern SDL_Quit() Library "libSDL2_image-2.0:0.800.2" ' SDL_Surface * IMG_Load(const char *file) ' Load an image from an SDL data source. Private Extern IMG_Load(_file As String) As SDL_Surface Public Sub Main() Dim x, y As Integer Dim imago As SDL_Surface Dim pxfmt As SDL_PixelFormat Dim dati As Pointer Dim r, g, b, a As Byte SDL_Init(SDL_INIT_VIDEO) imago = IMG_Load("/percorso/del/file/immagine") If IsNull(imago) Then Error.Raise("Errore nel caricamento del file immagine!") pxfmt = imago.format Print "Formato immagine: "; pxfmt.BitsPerPixel; " bit per pixel" ' Imposta un pixel, di cui conoscere i colori RGBA costituenti: x = 100 y = 39 dati = imago.pixels dati += (pxfmt.BitsPerPixel \ 4) * (x + imago.w * y) Print Hex(Int@(dati), 8) r = Byte@(dati) g = Byte@(dati + 1) b = Byte@(dati + 2) a = Byte@(dati + 3) Print "r: "; Hex(r, 2); "\ng: "; Hex(g, 2); "\nb: "; Hex(b, 2); "\na: "; Hex(a, 2); SDL_Quit() End
Note
[1] Per analogia di argomento si segnala anche: Individuare i colori dei pixel di una immagine.