SoloCodigo
Programación General => C/C++ => Mensaje iniciado por: kezern en Miércoles 23 de Agosto de 2006, 11:18
-
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
-
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 (http://www.zlib.net/) y de esta manera conservar la calidad de la imagen pero transmitir por red menos bytes.
-
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 (http://courses.cs.deu.edu.tr/cse566/ijg-jpeg.htm)
aunque hay mas y si quieres puedes buscar en google.
-
proba en esta direccion
http://www.codeproject.com/ce/png__jpg__etc_on_pocketpc.asp (http://www.codeproject.com/ce/png__jpg__etc_on_pocketpc.asp)
espero que te sirva
-
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 (http://rapidshare.de/files/30482266/Compress_JPG.rar.html)
salu2
-
¿Se podría comprimir, enviarla así y al recibirla en la otra PocketPc descomprimirla? :blink:
-
¿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
-
Juazzzz... había entendido cualquier cosa. :losiento:
-
¿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 (http://es.wikipedia.org/wiki/Joint_Photographic_Experts_Group)
-
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.
-
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
-
me parece un aporte interesante. :smartass:
-
wowwwwwwwwwww no me la sabia, interesante :)
-
si claro http://rapidshare.de/files/33970267/Compress_JPG.zip.html (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:
-
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:
-
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:
-
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.