Pregunta para Super Guru o tal vez no

Iniciado por Timerlux, 7 Julio 2007, 20:30 PM

0 Miembros y 2 Visitantes están viendo este tema.

sch3m4

si lo que quieres es hacer un programa para ver la pantalla remota en tiempo real, no se hace así. Tienes que hacer una primera captura, alojarla en el pc remoto y enviarla al cliente, y periodicamente guardar en el servidor otra captura de pantalla, y contrastar los dos archivos en busca de bytes diferentes, en lo que realmente es la imagen, y enviarle esos bytes al cliente, junto con la posición en la que deberían estar.
SafetyBits

"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.(..

Timerlux

Si señor ,no se me habia ocurrido, asi los datos por cada fotograma a enviar son muchisimo menores.

Lympex me puedes decir de donde sabes tu eso, conoces algun Link, Manual, Codigo o algo.

Me gustaria saber como de forma simple y limpia, Comparando 2 Byte Array, le mando informacion al cliente de los "Bytes Cambiados" y la "Posicion", a primera vista se me ocurre un Array de 2 dimensiones, pero eso ya no me gusta y se me podria complicar el tema .

Gracias Lympex  ;D ;D ;D

Hendrix

Eso de tansmitir datos por comparación es lo ideal...pero esto no sirve para fotogramas capturados de la web cam, pues habrá muy pocos pixels que coincidan.

"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián

Timerlux

Hendrix se puede hacer de forma cutre, si cojes el array de bytes del bitmap con 4 bits (16 colores) u 8 (256) bits de definicion ,si te coinciden muchisimos pixel pero pierdes mucha calidad.

Con "color real" 24 , 32 bits el minimo e inapreciable cabio de luz , cambia todos los pixels, nigun fotograma es igual al anterior aunque lo parezca, te lo digo por experiencia

Hendrix

Ya lo se, por eso te digo que con webcam no funciona eso... ;) ;)
"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián

sch3m4

para la webcam también serviría, lo que ocurre es que no puedes hacer la comparación literalmente, tendrías que cojer grupos de bytes, y mirar el porcentaje de bytes que son iguales/diferentes, y ajustarlo a tu gusto.

Timerlux, lo sé porque no eres el primero ni el último que necesita optimizar código ;)

No es algo muy complejo, pero debes tener en cuenta, que no puedes comparar el archivo completo, debes empezar a comparar después de la cabecera y el pie del archivo.

Mirate la estructura del archivo de imagen que guardas, mira cuánto ocupa la cabecera, etc. Y evalúa el resto del archivo.

Después unicamente cojes el byte que quieras enviar, y lo envías junto con la posición en la que se encuentra en tu archivo, pero asegurate, de que el tipo del fichero es igual en el cliente que en el servidor.
SafetyBits

"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.(..

Timerlux

La historia es que yo no uso ningun archivo, me ahorro ese paso.

Ni si quiera uso una Picturebox en el servidor para contener la imagen capturada, en su lugar uso las APIS  "CreateCompatibleDC", "CreateCompatibleBitmap".

No obtengo el "Byte Array" de un archivo previamente guardado, lo obtengo directamente de la imagen capturada.

El dilema ahora es que para usar el metodo de comparar cambios en imagenes , necesito comparar diferencias entre 2 "Byte arrays" y me tarda mucho Milisegundos entre (100 y 400), parece mentira pero puede que me no compense hacer comparaciones, si bien en la velocidad de transmision de datos ganare mucho, en el procesamiento de la imagenes perdere mucho, necesito encontrar un codigo rapido que haga las comparaciones arrays y me de otro array con los cambios, ahora estoy con eso solo he encontrado un codigo que me puede resolver la papeleta pero tengo que depurarlo y entenderlo muy bien.

Saludos  ;D ;D ;D


Timerlux

CitarDespués unicamente cojes el byte que quieras enviar, y lo envías junto con la posición en la que se encuentra en tu archivo

Esa es otra cosa que todavía no se como sera la mejor manera de Hacerlo

- Un array de 2 dimensiones?
  Cambios(posicion, byte)
  que tal se llevan los arrays de 2 dimensiones con Winsock?

- Un array de string
  Cambios("23#45") 

Teniendo en cuenta que la mi prioridad es la rapidez, no se que hacer

;D ;D

sch3m4

no te digo que uses picture box, realmente en este caso te sirve para poco en el lado del servidor, lo que te digo, es que guardes la primera captura, y esa la envias completa, y la visualizas en el cliente.

Luego, puedes usar un timer, e ir realizando capturas y guardandolas en otro archivo, y comparas ese nuevo archivo con el anterior, y envías las diferencias. Después de hacer esto, reemplazas el archivo antiguo, por el nuevo, y vuelves a realizar la captura y guardarla.

Yo usaría una string.
SafetyBits

"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.(..