• Sábado 21 de Diciembre de 2024, 17:14

Autor Tema:  Leer Pixeles Directo Del Archivo De Imagen  (Leído 3674 veces)

hzamorac

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Leer Pixeles Directo Del Archivo De Imagen
« en: Sábado 30 de Diciembre de 2006, 20:16 »
0
Saludos, soy nuevo en este foro espero puedan ayudarme.

Estoy haciendo una aplicación en vb6, en la cual leo ciertos pixeles de una imagen los cuales ya tengo identificados por coordenadas, comenzé haciendolo con getpixel y setpixel, pero ya saben, por la necesidad de más velocidad preferí usar GetDIBits y SetDIBits, el problema es el siguiente:

Tengo un picturebox que es de un tamaño específico, no puede cambiar su tamaño, la imagen que voy a leer la cargo a este picturebox, pero es más grande (en alto y ancho), cuando leo con GetDIBits y trato de copiarlos a otro picturebox con SetDIBits solo se copian los valores de la parte de la imagen que se ve en el picturebox y no de toda la imagen cargada.

No entiendo muy bien el GetDIBits, estoy usando como base otro programa que convierte a escala de grises, este programa maneja todo respecto al picturebox imagino que por esto es por lo que solo copia los pixeles visibles. El programa esta en:
www.vb-helper.com/howto_make_gray.html

Alguna idea de como leer los pixeles de una imagen sin tener que mostrarla toda en el picturebox? se acepta cualquier forma de hacerlo (aunque de preferencia leerla desde el archivo directamente jeje).

Muchas gracias espero haber sido claro y que me puedan ayudar con esto.

albertovicat

  • Miembro activo
  • **
  • Mensajes: 38
    • Ver Perfil
Re: Leer Pixeles Directo Del Archivo De Imagen
« Respuesta #1 en: Domingo 31 de Diciembre de 2006, 12:10 »
0
Hola hzamorac.
No creo que te convenga tratar de leerlos desde el archivo, porque suelen ser medio complicados en la forma de guardar la información de cada punto de la imagen. Y si se trata de algún formato comprimido (como jpg) mucho más (no decís que formato de imagen es la que querés leer).
Tendrías que ponerte a estudiar cada uno en particular y escribir algún procedimiento o rutina para que lo decodifique.
Mi sugerencia es que hagas visible la imagen entera (por ejemplo con un control Image con la propiedad Strecht = True, en vez de un PictureBox) y obtengas la información desde pantalla.
¡Suerte, y que tengas un buen 2007!

hzamorac

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Leer Pixeles Directo Del Archivo De Imagen
« Respuesta #2 en: Domingo 31 de Diciembre de 2006, 21:13 »
0
De hecho eso es lo que hago, muestro la imagen completa, pero en un picture box, el problema que tengo es que la imagen es muy grande y no alcanza a mostrarse toda en monitores con resolución de 800x600.

No se si usando un Image para que se ajuste a la imagen, aunque no se vea completo por las cuestiones de la resolución, pueda tomar todos los datos, aun de la parte que no se ve.

Sólo manejo un tipo de archivo, el bmp, por eso talvez me sirva leerlo desde el archivo ya que solo haria una rutina.

Bueno seguiremos investigando.

Gracias por la respuesta y Feliz año para ti tmb.

Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Re: Leer Pixeles Directo Del Archivo De Imagen
« Respuesta #3 en: Jueves 4 de Enero de 2007, 04:30 »
0
Buenas .
Sinceramente no se de donde es la funcion GetDIBits, aunque me paso algo similar. El problema es que mucha de estas funciones copian el el color directamente del monitor ( o sea de la memoria de imagen) por lo que si el pixel esta tapado o fuera del minitor no tomara bien el color.
Las dos opciones q tienes (creo, quisas hay mas) son leer directamente del fichero o de la memoria, cosa q no creo q sea sencillo en VB, investiga quisas con punteros puedas /ya q los punteros de vb son bastante limitados).

Espero te sirva, saludos.
The sweet smell of a great sorrow lies over the land.


Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Re: Leer Pixeles Directo Del Archivo De Imagen
« Respuesta #4 en: Jueves 4 de Enero de 2007, 05:03 »
0
:whistling:

me parece q no lei bien el post.

El archivo BMP tiene 4 partes:
1-cabecera de archivo
2-cabecera de bitmap
3-tabla de colores
4-bytes de imagen

los datos de las cabeceras son:

Código: Text
  1.  
  2. Bytes           Informacion
  3. 0-1              Letras BM
  4. 2-5              Tamaño del archivo
  5. 6-9              Reservado
  6. 10-13           Datos de imagen
  7. 14-17           Tamaño de la cabezera de bitmar
  8. 18-21           Anchura
  9. 22-25           Altura
  10. 26-27           Numero de planos
  11. 28-29           Tamaño de cada punto
  12. 30-33           Compresion
  13. 34-37           Tamaño de la imagen
  14. 38-41           Resolucion horizontal
  15. 42-45           Resolucion Vertical
  16. 46-49           Tamaño de la tabla de colores
  17. 50-53           Contador de colores importantes
  18.  
  19.  

para recuperar del archivo necesita recuperar datos como ancho y alto, resolucion, compresion y otras cosas, para poder interpretar bien los datos de la imagen. a menos q ya lo sepas y recuperes directamente la imagen. cuando abres el archivo te mueves a la posicion 53 + tamaño de la tabla de colores y tendras los bytes de imagen.

Saludos
The sweet smell of a great sorrow lies over the land.


hzamorac

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Leer Pixeles Directo Del Archivo De Imagen
« Respuesta #5 en: Martes 9 de Enero de 2007, 03:55 »
0
Efectivamente, es lo que quería hacer con el GetDibits, pensé que cargaba la información desde el archivo, pero no, lo carga desde la pantalla.

Sinceramente estoy perdido con esto jejeje, si alguien tiene un ejemplo que me pueda proporcionar les estaría muuuuy agradecido.

Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Re: Leer Pixeles Directo Del Archivo De Imagen
« Respuesta #6 en: Miércoles 10 de Enero de 2007, 01:35 »
0
teniendo esa info, yo te aconsejaria recuperar los datos abriendo el archivo en modo binario. Puede q sea un poco mas lento q las otras funciones, pero es muy certero, siempre q lo leas correctamente.

Saludos
The sweet smell of a great sorrow lies over the land.