Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 2
Ir a la página 1, 2  Siguiente
 
Como Saber El Color De Un Pixel En Un DrawingArea
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Como Saber El Color De Un Pixel En Un DrawingArea 
 
En el siguiente post "Cómo Pintar Un Píxel En Un Drawing Area" (http://foro.gambas-es.org/viewtopic.php?f=4&p=30048#p30048) el amigo vuott nos ha resuelto ese problema.

Pero yo planteo lo inverso: tengo dibujado algo en un drawingArea, y necesito saber el color del pixel en una determinada coordenada dentro del drawing area. ¿para que sirve esto? Pues puede servir para comparar distintas imágenes y comprobar que cosas (pixeles) han cambiado de una a otra.

Saludos
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Como Saber El Color De Un Pixel En Un DrawingArea 
 
jsbsan escribió: [Ver mensaje]
En el siguiente post "Cómo Pintar Un Píxel En Un Drawing Area" (http://foro.gambas-es.org/viewtopic.php?f=4&p=30048#p30048) el amigo vuott nos ha resuelto ese problema.

Pero yo planteo lo inverso: tengo dibujado algo en un drawingArea, y necesito saber el color del pixel en una determinada coordenada dentro del drawing area.



      " ...y entonces vuott separó las aguas ! "

      1594_h

Library "libX11:6.3.0"

Private Enum XYBitmap = 0, XYPixmap, ZPixmap

' Display *XOpenDisplay(char *display_name)
' Opens a connection to the X server that controls a display.
Private Extern XOpenDisplay(display$ As String) As Pointer

' unsigned long XAllPlanes()
' Returns a value with all bits set to 1 suitable for use in a plane argument to a procedure.
Private Extern XAllPlanes() As Long

' 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.
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

' unsigned long XGetPixel(XImage *ximage, int x, int y)
' Returns the specified pixel from the named image.
Private Extern XGetPixel(ximage As Pointer, xI As Integer, yI As Integer) As Long

' XCloseDisplay(Display *display)
' Closes the connection to the X server for the display specified in the Display structure and destroys all windows.
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]

' Dibujamos dentro del "DrawingArea":
  With Paint
    .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)
  If IsNull(dsp) Then Error.Raise("Impossible conectarse al server X !")
  
' Conseguimos un Puntero a la "Estructura" contenente los datos de la imagen dibujada en el "DrawingArea":
  XImage = XGetImage(dsp, DrawingArea1.Handle, 0, 0, DrawingArea1.W, DrawingArea1.H, XAllPlanes(), XYPixmap)
  If IsNull(XImage) Then Error.Raise("Impossible obtener un 'Puntero' a los datos da la imagen del DrawingArea !")

' Mostramos el valor en esadecimale de un pixel puesto a las coordenadas establecidas en el 2° y 3° parámetro de la siguiente función:
  Print Hex(XGetPixel(XImage, 290, 52), 8)

' Terminando:
  XCloseDisplay(dsp)

End

 



 
última edición por vuott el Martes, 02 Febrero 2016, 13:42; editado 3 veces 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Como Saber El Color De Un Pixel En Un DrawingArea 
 
Vuott:

Gracias por tu pronta respuesta !!!

Saludos
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Como Saber El Color De Un Pixel En Un DrawingArea 
 
Vuott:


Problemas

Me sale el mensaje de ("Impossible obtener un 'Puntero' a los datos da la imagen del DrawingArea !")

Mi sistema es de 32 bits ¿puede ser por eso?

Nota:
Estoy usando gambas3.5.4 (aunque creo que eso da igual en este caso   )
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
última edición por jsbsan el Martes, 02 Febrero 2016, 20:29; editado 1 vez 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Como Saber El Color De Un Pixel En Un DrawingArea 
 
jsbsan escribió: [Ver mensaje]
Me sale el mensaje de ("Impossible obtener un 'Puntero' a los datos da la imagen del DrawingArea !")

uhmmm... a mi no da problema, pero recuerdo que un miembro del foro italiano obtenía el tu mismo problema.

Prueba cambiando la variable XYPixmap con esta: ZPixmap

saludos
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Como Saber El Color De Un Pixel En Un DrawingArea 
 
Vuott:

Citar:

Prueba cambiando la variable XYPixmap con esta: ZPixmap


¿ Aquí ?.

XImage = XGetImage(dsp, DrawingArea1.Handle, 0, 0, DrawingArea1.W, DrawingArea1.H, XAllPlanes(), XYPixmap)
 


¿ Por esto ?:

XImage = XGetImage(dsp, DrawingArea1.Handle, 0, 0, DrawingArea1.W, DrawingArea1.H, XAllPlanes(),ZPixmap )
 


Da el mismo error.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Como Saber El Color De Un Pixel En Un DrawingArea 
 
Shell escribió: [Ver mensaje]
Da el mismo error.


Uhmmm... yo se que tú tambien tienes un sistema de 32-bit. ...podría ser esta la razón del problema.    

Yo tengo un 64-bit, y en particular:

[System]
Gambas=3.8.90 r7601
OperatingSystem=Linux
Kernel=3.19.0-32-generic
Architecture=x86_64
Distribution=Linux Mint 17.3 Rosa
Desktop=GNOME
Theme=Cleanlooks
Language=it_IT.UTF-8
Memory=3952M

 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Como Saber El Color De Un Pixel En Un DrawingArea 
 
Pedí ayuda para un test del codigo a un nuestro amigo del foro italiano. Él me dijo que el codigo funciona. Él tiene este sistema:
Gambas=3.8.4
Kernel=3.16.0-60-generic
Architecture=x86_64
Distribution=Ubuntu 14.04.3 LTS

 



 
última edición por vuott el Miercoles, 03 Febrero 2016, 23:48; editado 1 vez 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Como Saber El Color De Un Pixel En Un DrawingArea 
 
Buenos días!.

Hice una prueba de copiar una parte de una imagen pixel a pixel.

 copiar_pixeles

El código es este. En el drawingarea de la izquierda muestro la imagen y en el de la derecha, conociendo la imagen,
selecciono una parte con los dos bucle for para los dos ejes y muestro esa parte en el otro drawingArea.

' gambas class file

Private unaimagen As New Image

Public Sub Form_Open()
  
  unaimagen = unaimagen.Load("buho100x100.png")  
  
End

Public Sub MostarImagen()
  
  Dim x, y As Float
  Dim w, h As Float  
  Dim pincel As PaintBrush
  
  x = 0
  y = 0  
  w = unaimagen.W
  h = unaimagen.H
  
  pincel = Paint.Image(unaimagen)
  pincel.Translate(x, y)
  Paint.Brush = pincel
  Paint.Rectangle(x, y, w, h)
  Paint.Fill
  
End

Public Sub MostarParte()
  
  Dim x, y As Float
  Dim w, h As Float
  Dim valorcolor As Integer
  
  'Copiamos el horizontal y la mitad del vertical y la mostramos en el DrawingArea2
  For y = 0 To unaimagen.H / 2
    For x = 0 To unaimagen.W
      valorcolor = unaimagen[x, y]
      Paint.FillRect(x, y, 1, 1, valorcolor)    
    Next
  Next
  
End

Public Sub drw1_Draw()
  
  MostarImagen
  
End

Public Sub drw2_Draw()
  
  MostarParte
  
End
 


Con tiempo haré una pregunta.
Aquí tenéis el código para probar. Es simple.

Saludos

CopiarPixelesImagen.tar.gz
Descripción:  
Descargar
Nombre del archivo: CopiarPixelesImagen.tar.gz
Tamaño: 23.09 KB
Descargado: 29 veces
CopiarPixelesImagen.tar.gz
Descripción:  
Descargar
Nombre del archivo: CopiarPixelesImagen.tar.gz
Tamaño: 23.09 KB
Descargado: 29 veces
CopiarPixelesImagen.tar.gz
Descripción:  
Descargar
Nombre del archivo: CopiarPixelesImagen.tar.gz
Tamaño: 23.09 KB
Descargado: 29 veces

 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Domingo, 07 Febrero 2016, 10:00; editado 1 vez 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Como Saber El Color De Un Pixel En Un DrawingArea 
 
shell muy bueno, por este método se podría girar la imagen 90 120 grados etc, también efectuar los efectos reflejo horizontal y vertical, todo esto solamente manipulando la posición de los píxeles o mejor dicho cambiando su posición.
atentos los programadores que les gusta el manejo de imágenes ajjajaja.
 




===================
Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
 
v3ctor - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Como Asigno Color Con Trasparencia ?? francopenizzotto General 8 Martes, 04 May 2010, 01:15 Ver último mensaje
francopenizzotto
No hay nuevos mensajes Como Obtener Información De Un Pixel En U... arielrvjr_14 Controles/Librerías/Componentes 2 Miercoles, 13 Julio 2011, 09:19 Ver último mensaje
jguardon
No hay nuevos mensajes Como Se Declara Una Variable De Tipo Color? v3ctor General 2 Domingo, 01 Diciembre 2013, 21:03 Ver último mensaje
v3ctor
No hay nuevos mensajes ¿ Es Posible Un DrawingArea Como Mascara ? Shell General 8 Sabado, 19 Noviembre 2016, 16:56 Ver último mensaje
vuott
 

Publicar nuevo tema  Responder al tema  Página 1 de 2
Ir a la página 1, 2  Siguiente

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron