Programación General > Visual C++

 Voimage Imagen Desde Memoria

<< < (5/6) > >>

kezern:
He cambiado la función para que vaya incrementando la posición de memoria que lee y ahora la tengo así:

--- Código: Text --- DWORD CALLBACK CVOImage::GetImageDataBuffer(LPSTR szBuffer, DWORD dwBufferMax, LPARAM lParam ){  memcpy(szBuffer + start,mf.data + start,dwBufferMax);  start = start + dwBufferMax;        return dwBufferMax;}  Al ejecutar el programa y pulsar en el botón para que ejecute la función, muestra una pantalla en blanco durante un instante y luego sale del programa (no debería salir del programa sino mostrar la imagen hasta que pulse yo en la pantalla).

Eternal Idol:

--- Código: Text --- memcpy(szBuffer + start,mf.data + start,dwBufferMax);  
Esto esta mal, szBuffer es el buffer de el y no podes escribir en cualquier lado una X cantidad de bytes, tenes que escribir esa X cantidad (dwBufferMax) desde el principio, asi:


--- Código: Text --- memcpy(szBuffer, mf.data + start, dwBufferMax);  
Por cualquier problema que encuentres vas a tener que depurar el programa, es casi imposible solucionarlo on line.

kezern:
He seguido mirando y he vuelto a hacer cambios. Ahora la función la tengo así:

--- Código: Text --- DWORD CALLBACK CVOImage::GetImageDataBuffer(LPSTR szBuffer, DWORD dwBufferMax, LPARAM lParam ){        int size = min(mf.size - start, (int)dwBufferMax);  memcpy(szBuffer,mf.data + start,size);  start += size;        return size;}  De esta forma controlo que no se lean más bytes de los necesarios y también voy incrementando la dirección de memoria donde voy guardando los datos.
Ahora me muestra la imagen durante un instante y después se vuelve negro.

Eternal Idol:
Depuralo ... y sino para hacerlo mas simple podes empezar usando printf's asi por ejemplo:


--- Código: Text --- DWORD CALLBACK CVOImage::GetImageDataBuffer(LPSTR szBuffer, DWORD dwBufferMax, LPARAM lParam ){  int size = min(mf.size - start, (int)dwBufferMax);  printf(&#34;dwBufferMax::%d min::%d start::%d&#092;r&#092;n&#34;, dwBufferMax, min, start);  memcpy(szBuffer,mf.data + start,size);  start += size;  return size;}  

kezern:
He encontrado el problema. Tenía la función dentro de un timer porque quiero refrescar la imagen y lo que hacía en la segunda vuelta del timer era dibujarme la pantalla en negro.
Muchas gracias.

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior

Ir a la versión completa