Differenze tra le versioni di "Ottenere il valore di un pixel in una DrawingArea mediante le funzioni esterne del API di X11"

Da Gambas-it.org - Wikipedia.
(Creata pagina con 'Per ottenere il valore di un pixel presente in una ''DrawingArea'', è possibile utilizzare alcune funzioni esterne dell libreria ''X11''. Ciò è possibile, in quanto la ''Dr...')
 
 
(9 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
Per ottenere il valore di un pixel presente in una ''DrawingArea'', è possibile utilizzare alcune funzioni esterne dell libreria ''X11''. Ciò è possibile, in quanto la ''DrawingArea'' non è nient'altro che una finestra come le altre, avente un proprio numero identificativo, sulla quale si potrà agire con la predetta libreria di ''X11''.
+
#REDIRECT [[Ottenere_il_valore_di_un_pixel_in_una_DrawingArea#Usando_le_funzioni_esterne_del_API_di_X11]]
 
 
Sarà necessario richiamare nell'applicativo Gambas la libreria di X attualmente: "''libX11.so.6.3.0''"
 
 
 
 
 
Mostriamo di seguito un breve codice, nel quale disegneremo all'interno di una ''DrawingArea'' una riga colorata con tutta la gamma dei colori dal blu al rosso. Individuiremo un pixel facente parte di tale riga colorata della ''DrawingArea'', e ne mostreremo il valore in rappresntazione esadecimale:
 
Library "libX11:6.3.0"
 
 
Private Enum XYBitmap = 0, XYPixmap, ZPixmap
 
 
<FONT Color=gray>' ''Display *XOpenDisplay(char *display_name)''
 
' ''Opens a connection to the X server that controls a display.''</font>
 
Private Extern XOpenDisplay(display$ As String) As Pointer
 
 
<FONT Color=gray>' ''unsigned long XAllPlanes()''
 
' ''Return a value with all bits set to 1 suitable for use in a plane argument to a procedure.''</font>
 
Private Extern XAllPlanes() As Long
 
 
<FONT Color=gray>' ''XImage *XGetImage(Display *display, Drawable d, int x, int y, unsigned int width, unsigned int height, unsigned long plane_mask, int format)''
 
' ''Returns a pointer to an XImage structure.''</font>
 
Private Extern XGetImage(displayP As Pointer, d As Long, xI As Integer, yI As Integer, wid As Integer, hei As Integer, plane_mask As Long, formatI As Integer) As Pointer
 
 
<FONT Color=gray>' ''unsigned long XGetPixel(XImage *ximage, int x, int y)''
 
' ''Returns the specified pixel from the named image.''</font>
 
Private Extern XGetPixel(ximage As Pointer, xI As Integer, yI As Integer) As Long
 
 
<FONT color=gray>' ''XCloseDisplay(Display *display)''
 
' ''Closes the connection to the X server for the display specified in the Display structure and destroys all windows.''</font>
 
Private Extern XCloseDisplay(displayP As Pointer)
 
 
 
'''Public''' Sub Form_Open()
 
 
 
  DrawingArea1.Background = Color.White
 
 
'''End'''
 
 
 
'''Public''' Sub DrawingArea1_Draw()
 
 
 
  Dim c As Integer[] = [Color.Blue, Color.Green, Color.Yellow, Color.Red]
 
  Dim p As Float[] = [0, 0.34, 0.67, 1]
 
 
<FONT Color=gray>' ''Disegnamo all'interno della "DrawingArea":''</font>
 
  With Paint
 
    .Begin(DrawingArea1)
 
    .Brush = .LinearGradient(10, 40, 300, 40, c, p)
 
    .Rectangle(10, 40, 300, 40)
 
    .Fill
 
    .End
 
  End With
 
 
'''End'''
 
 
 
'''Public''' Sub Button1_Click()
 
 
  Dim dsp As Pointer
 
  Dim XImage As Pointer
 
 
 
  dsp = XOpenDisplay(Null)
 
   
 
<FONT Color=gray>' ''Otteniamo un puntatore alla "Struttura" contenente i dati dell'immagine disegnata nella "DrawingArea":''</font>
 
  XImage = XGetImage(dsp, DrawingArea1.Handle, 0, 0, DrawingArea1.W, DrawingArea1.H, XAllPlanes(), XYPixmap)
 
 
<FONT Color=gray>' ''Mostriamo il valore in esadecimale di un pixel posto alle coordinate stabilite nel 2° e 3° parametro della seguente funzione:''</font>
 
  Print Hex(XGetPixel(XImage, 290, 52), 8)
 
 
<FONT Color=gray>' ''Va in chiusura:''</font>
 
  XCloseDisplay(dsp)
 
 
'''End'''
 
 
 
 
 
 
 
 
 
=Riferimenti=
 
* [http://www.x.org/wiki/ X.Org project]
 
* [http://tronche.com/gui/x/xlib/ The Xlib Manual]
 

Versione attuale delle 18:06, 8 dic 2021