Portal    Foro    Buscar    FAQ    Registrarse    Conectarse

Como Usar Image.data

Como Usar Image.data
Artículo
Responder citando    Descargar mensaje  
Mensaje Como Usar Image.data 
 
Hola a todos.
Como saben gambas tiene una función para manejar imágenes
si por ejemplo definimos
Dim img As Image

Luego podemos hacer
Print img.H
Print img.W
etc.

Pero existe también img.Data ¿Alguien sabe si es posible usar esto para leer metadatos d ela imagen? me interesa la fecha de captura la marca d ela camara el modelo etc. los datos que da exiftool.
si pongo
Print img.Data

imprime en la consola un texto algo así como 6XDC9Z196010
¿Alguin sabe como se usa .Data?
Saludos



 
tincho - Ver perfil del usuario Enviar mensaje privado  
tincho [ Miercoles, 25 Diciembre 2019, 22:29 ]
 


Como Usar Image.data
Comentarios
Responder citando    Descargar mensaje  
Mensaje Re: Como Usar Image.data 
 
tincho escribió: [Ver mensaje]

si pongo
Print img.Data

imprime en la consola un texto algo así como 6XDC9Z196010
¿Alguin sabe como se usa .Data?

Hola tincho,
el numero hexadecimal, que tu ves, rapresenta la dirección de memoria donde están almacenados los datos (es decir: cada byte de cada pixel) de la imagen.
Por eso la propriedad ".Data" del objeto Image es una variable de tipo Puntero.
Tu puedes gestionar esta dirección de memoria solo con las funciones de desreferencia - Byte@(), Shot@(), et... - de Gambas:
   http://gambaswiki.org/wiki/cat/externfunc

o usando Memory Stream
   http://gambaswiki.org/wiki/lang/memory


Unos ejemplos:

   https://www.gambas-es.org/show_post.php?p=23672
   https://www.gambas-it.org/wiki/inde...i_Memory_Stream
   https://www.gambas-it.org/wiki/inde...referenziazione


Vamos a ver un breve ejemplo leyendo con la función de desreferencia "Byte@( )"  en la propiedad ".Data" de una siiimple imagen de 2x2 pixel:
Public Sub Button1_Click()

  Dim im As Image
  Dim i As Integer
  
' Crea una imagen de 2x2 pixel todos rojos:
  im = New Image(2, 2, Color.Red, gb.Standard)

' Lee cada byte de cada pixel de la imagen:
  For i = 0 To (im.Pixels.Count * (im.Depth / 8)) - 1
    If (i Mod CInt(im.Depth / 8) == 0) Then Print "\n---Pixel---"
    Print i, Hex(Byte@(im.Data + i), 2)
  Next

End




 
última edición por vuott el Jueves, 26 Diciembre 2019, 02:45; editado 4 veces 
vuott - Ver perfil del usuario Enviar mensaje privado  
vuott [ Jueves, 26 Diciembre 2019, 01:03 ]
Responder citando    Descargar mensaje  
Mensaje Re: Como Usar Image.data 
 
Perfecto Vuott.
Si comprendo bien, en la memoria están guardados todos los bytes de la imagen (incluidos los de los metadatos, que no son pixeles.)
Se trataría como un archivo binario que cargas entonces.
.Data entonces no es lo que estoy buscando.
Soluciono el tema con Shell, jhead  y exiftool, y acelere el código optimizando las consultas sql.
Dejo para mas adelante la optimización de metadatos.
Gracias
Saludos.



 
tincho - Ver perfil del usuario Enviar mensaje privado  
tincho [ Jueves, 26 Diciembre 2019, 03:34 ]
Responder citando    Descargar mensaje  
Mensaje Re: Como Usar Image.data 
 
tincho escribió:  

(incluidos los de los metadatos)

Uhmmm... no creo, no creo.



 
última edición por vuott el Jueves, 26 Diciembre 2019, 15:04; editado 1 vez 
vuott - Ver perfil del usuario Enviar mensaje privado  
vuott [ Jueves, 26 Diciembre 2019, 14:59 ]
Mostrar mensajes anteriores:    
 
Ocultar¡Este tema fue útil?

 

Elegir valoración:                       

Media de valoración Valoración mínima Valoración máxima Número de valoraciones
0.00 0 0 0
 
Publicar nuevo tema  Responder al tema  Página 1 de 1
 
 

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