Programación General > Visual C++
Voimage Imagen Desde Memoria
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("dwBufferMax::%d min::%d start::%d\r\n", 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
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa