• Lunes 23 de Diciembre de 2024, 14:33

Autor Tema:  Reducir El Peso De Una Imagen  (Leído 6422 veces)

kezern

  • Miembro activo
  • **
  • Mensajes: 26
    • Ver Perfil
Reducir El Peso De Una Imagen
« en: Miércoles 23 de Agosto de 2006, 11:18 »
0
Estoy haciendo un programa en Visual C++ para funcionar en un pocketpc. Por ahora conecto con la cámara del pocketpc y muestro el video en la pantalla. A la vez voy refrescando un buffer con los fotogramas que capturo de la cámara. Ahora intento mandar el contenido de ese buffer 30 veces por segundo a otro pocketpc para mostrar el video el el otro pocketpc. Se que la conexión por TCP se realiza bien porque he intentado mandar una sola vez el contenido del buffer y lo hace bien, pero cuando lo intento hacer de forma contínua el programa se bloquea. La imagen del buffer tiene una resolución de 320*240 y 2 bytes por píxel, lo que hace un tamaño de imagen de 150 kb. He hecho la prueba de mandar solo la mitad de la imágen y me lo hace bien, así que supongo que será un problema que la imágen es pesada para poder mandarla. Me gustaría saber alguna forma de reducirle el peso a unos 75Kb. No tengo muy claro como pasarla a escala de grises o si hay alguna compresión que pueda servirme.
Un saludo y gracias

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Reducir El Peso De Una Imagen
« Respuesta #1 en: Miércoles 23 de Agosto de 2006, 11:36 »
0
Pasarlo a escala de grises te serviria si y solo si cambias la profundida del color a 256 (8 bits) asi el tamaño de la imagen se reduciria. Si lo que haces es conservar los 24/32 bits no te servira de nada. Tambien podes optar por usar alguna libreria de compresion generica tipo Zlib y de esta manera conservar la calidad de la imagen pero transmitir por red menos bytes.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Reducir El Peso De Una Imagen
« Respuesta #2 en: Miércoles 23 de Agosto de 2006, 15:05 »
0
No se puntualmente en tu caso pero utilizar JPEG con calidad 100% te servira mas que suficiente para lo que necesitas.

Una libreria gratuita para JPEG:

http://courses.cs.deu.edu.tr/cse566/ijg-jpeg.htm

aunque hay mas y si quieres puedes buscar en google.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

pabloreda

  • Miembro MUY activo
  • ***
  • Mensajes: 125
    • Ver Perfil
    • http://www.reda4.org
Re: Reducir El Peso De Una Imagen
« Respuesta #3 en: Miércoles 23 de Agosto de 2006, 15:25 »
0
proba en esta direccion

http://www.codeproject.com/ce/png__jpg__etc_on_pocketpc.asp

espero que te sirva

robokop

  • Miembro activo
  • **
  • Mensajes: 70
    • Ver Perfil
Re: Reducir El Peso De Una Imagen
« Respuesta #4 en: Miércoles 23 de Agosto de 2006, 18:45 »
0
Mira este codigo en visual C++ , te permite comprimir una imagen elijiendo la escala de la calidad de 1-100 y tambien crea otra imagen de resolucion a escala.
a mi una imagen de 3.15 MB me la deja en 80 kb asi que es probable que tu imagen pese menos de 15 kb, con una calidad optima, si bajas la calidad va disminuir el peso.
http://rapidshare.de/files/30482266/Compress_JPG.rar.html
salu2

x.cyclop

  • Miembro de PLATA
  • *****
  • Mensajes: 1039
  • Nacionalidad: mx
    • Ver Perfil
Re: Reducir El Peso De Una Imagen
« Respuesta #5 en: Miércoles 23 de Agosto de 2006, 19:14 »
0
¿Se podría comprimir, enviarla así y al recibirla en la otra PocketPc descomprimirla? :blink:

- Great works aren't produced on the first try. [Ernest Hemingway]
- Be ambitious, yet realistic in your dreams. Do something that makes a positive impact. Don’t let the nay-sayers get you down. [Bjarne Stroustrup]

robokop

  • Miembro activo
  • **
  • Mensajes: 70
    • Ver Perfil
Re: Reducir El Peso De Una Imagen
« Respuesta #6 en: Miércoles 23 de Agosto de 2006, 19:32 »
0
Citar
   ¿Se podría comprimir, enviarla así y al recibirla en la otra PocketPc descomprimirla?
No no asi no es la cosa.
Esque cuando se comprime no se comprime en Zip,rar,tgz etc...
Lo que hace es sustraer bits de la imagen dependiendo de la calidad que quieras pero los sustrae de acuerdo al formato JPG recordemos que el BMP tiene muchos mas que jpg o png por eso la imagen es mas pesada lo que se hace es una conversion y se comprime la imagen a JPG decir comprimir es como un decir , para que quede un poco mas claro .
por ejemplo de toma una captura de pantalla se deja en 3 MB la comprimes y la dejas en 80 kb en formato jpg, esto es util para aplicaciones cliente/servidor o para el tipo que quiere hacer kezern asi se dismunuye muchisimo el tiempo

x.cyclop

  • Miembro de PLATA
  • *****
  • Mensajes: 1039
  • Nacionalidad: mx
    • Ver Perfil
Re: Reducir El Peso De Una Imagen
« Respuesta #7 en: Miércoles 23 de Agosto de 2006, 19:36 »
0
Juazzzz... había entendido cualquier cosa. :losiento:

- Great works aren't produced on the first try. [Ernest Hemingway]
- Be ambitious, yet realistic in your dreams. Do something that makes a positive impact. Don’t let the nay-sayers get you down. [Bjarne Stroustrup]

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Reducir El Peso De Una Imagen
« Respuesta #8 en: Miércoles 23 de Agosto de 2006, 19:48 »
0
Cita de: "X.Cyclop"
¿Se podría comprimir, enviarla así y al recibirla en la otra PocketPc descomprimirla? :blink:
Por supuesto que se puede; otra cosa es que sea lo mas efectivo. Si la imagen sera mostrada en ese momento la compresion y descompresion la hara alguien si o si ya que cualquier formato grafico tendra que expresarse pixel por pixel en pantalla.

Por otro lado el JPEG generalmente no sustrae bits (casi todas las imagenes que vemos son de 24 bits).

http://es.wikipedia.org/wiki/Joint_Photogr...c_Experts_Group

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

kezern

  • Miembro activo
  • **
  • Mensajes: 26
    • Ver Perfil
Re: Reducir El Peso De Una Imagen
« Respuesta #9 en: Lunes 18 de Septiembre de 2006, 19:37 »
0
Muchas gracias a todos por vuestras respuestas. He estado un poco ausente últimamente, mañana mismo pongo en prueba todos los consejos que me habéis dado.
Robokop, el enlace que has puesto ha caducado, serías tan amable de ponerlo de nuevo?
Un saludo y gracias de nuevo por todo.

jcjulio

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Reducir El Peso De Una Imagen
« Respuesta #10 en: Jueves 21 de Septiembre de 2006, 22:37 »
0
Mira te doy un consejo ojala te sirva.
Cuando la TV se invento era en blanco y negro y fue asi durante muchos años, a la transmision de TV se le asigno un ancho de banda en el espectro de frecuencias.  Despues de mucho tiempo se invento la TV a color y esta necesita mayor ancho de banda para ser transmitida.  y surgio un problema el ancho de banda de la TV a blanco y negro era muy pequeño y no se iba tener q reasignar todo el espectro de frecuencia solo por la TV, entonces se creo una solucion que te puede servir.

La TV blanco y negro mandaba 30 imagenes por segundo pero solo mandava una matriz plana.  En cambio la TV a coloor tenia que enviar un matriz tridimensional (true color) y esto ocupa mucho ancho de banda.

La solucion al problema de ancho de banda fue primero enviar las filas pares y que el televisor pinte en su pantalla las filas pares; y luego enviar las filas impares y que el televisor pinte las líneas impares.  y aumentando la velosidad a 60 imagnes por segundo se engaña a la vista y tu no te das cuenta que te estan enviando primero las filas impares y luego las pares.  Asi funciona la TV a color actual.

En tonces al enviar primero filas impares y despues filas pares, estarias reduciendo tu ancho de banda a la mitad, claro que tienes que aumentar la velocidad.

Si te sirve esto respondeme para saber si te pude ayudar, y si no me entendiste mucho escribeme tambien aver si te puedo explicar mejor

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Reducir El Peso De Una Imagen
« Respuesta #11 en: Jueves 21 de Septiembre de 2006, 22:43 »
0
me parece un aporte interesante.  :smartass:
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

ArKaNtOs

  • Miembro de PLATA
  • *****
  • Mensajes: 1253
  • Nacionalidad: mx
    • Ver Perfil
Re: Reducir El Peso De Una Imagen
« Respuesta #12 en: Jueves 21 de Septiembre de 2006, 22:49 »
0
wowwwwwwwwwww no me la sabia, interesante :)

robokop

  • Miembro activo
  • **
  • Mensajes: 70
    • Ver Perfil
Re: Reducir El Peso De Una Imagen
« Respuesta #13 en: Jueves 21 de Septiembre de 2006, 23:52 »
0
si claro http://rapidshare.de/files/33970267/Compress_JPG.zip.html
te tardaste tiempo en ver la respuesta , no se como le haces para aguantar tanto tiempo para resolver un problema yo me vuelvo loco jeje  :lightsabre:

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Reducir El Peso De Una Imagen
« Respuesta #14 en: Viernes 22 de Septiembre de 2006, 03:03 »
0
Cita de: "jcjulio"
Mira te doy un consejo ojala te sirva.
Cuando la TV se invento era en blanco y negro y fue asi durante muchos años, a la transmision de TV se le asigno un ancho de banda en el espectro de frecuencias.  Despues de mucho tiempo se invento la TV a color y esta necesita mayor ancho de banda para ser transmitida.  y surgio un problema el ancho de banda de la TV a blanco y negro era muy pequeño y no se iba tener q reasignar todo el espectro de frecuencia solo por la TV, entonces se creo una solucion que te puede servir.

La TV blanco y negro mandaba 30 imagenes por segundo pero solo mandava una matriz plana.  En cambio la TV a coloor tenia que enviar un matriz tridimensional (true color) y esto ocupa mucho ancho de banda.

La solucion al problema de ancho de banda fue primero enviar las filas pares y que el televisor pinte en su pantalla las filas pares; y luego enviar las filas impares y que el televisor pinte las líneas impares.  y aumentando la velosidad a 60 imagnes por segundo se engaña a la vista y tu no te das cuenta que te estan enviando primero las filas impares y luego las pares.  Asi funciona la TV a color actual.

En tonces al enviar primero filas impares y despues filas pares, estarias reduciendo tu ancho de banda a la mitad, claro que tienes que aumentar la velocidad.

Si te sirve esto respondeme para saber si te pude ayudar, y si no me entendiste mucho escribeme tambien aver si te puedo explicar mejor
No entiendo, si tengo esto :::::..., lo paso a esto ............ porque seria mas rapido, siendo que es la misma cantidad de datos?
 :blink:
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Reducir El Peso De Una Imagen
« Respuesta #15 en: Viernes 22 de Septiembre de 2006, 14:35 »
0
puede que no sea mas rapido pero si consumira menos recursos en el proceso de transferencia de datos y en un instante X de tiempo solo debe dibujar la mitad de la imagen y en el otro instante la otra mitad...

me surge la inquietud respecto a la complejidad del programa y si es o on conveniente hacerlo para pocket PC:
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Reducir El Peso De Una Imagen
« Respuesta #16 en: Viernes 22 de Septiembre de 2006, 21:39 »
0
Buen punto.
La NASA usa TIFF, con LZW (No para satelites, eso es un archivo muy deferente y mas grande ya que tiene unos 13 canales por cada pixel)
El secreto esta en el metodo de compresion, supongo.
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.