 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Punishero Cdt

Registrado: 11 Nov 2004Mensajes: 5
|
Publicado: Jue 11 Nov, 2004 11:07 pm Asunto: fallo con TStreams y Buffers |
|
|
Buenas a tod@s, les quiero felicitar por esta fabulosa herramienta y por dedicar parte de su tiempo a ayudar a los que menos saben
Mi consulta, es sobre un error que me cierra el programa, sin haber hecho lo que yo quiero
Bueno, la idea es que cargo un video (*.Mjpeg) con un FileOpen y leo los 5 primeros bytes para obtener la longitud de la primera imagen del video, luego vuelvo a leer esa longitud y lo meto en un TMemoryStream para intentar verla en un TImage.
El codigo: (soy novato)
int iFileHandle;
int iBytesRead;
int iFileLength;
int puntero;
char *pszBuffer;
char *pszJPG;
TMemoryStream *imagen;
try
{
//abro video
iFileHandle = FileOpen(Edit1->Text, fmOpenRead);
//obtengo su longitud
iFileLength = FileSeek(iFileHandle,0,2);
//lo posiciono al principio
FileSeek(iFileHandle,0,0);
//creo buffer longitud 5 bytes
pszBuffer = new char[5];
//leo los primeros 5 bytes del video(=tam primera imagen)
iBytesRead = FileRead(iFileHandle, pszBuffer, puntero);
//creo buffer para meter la imagen
pszJPG = new char [(int)pszBuffer];
//leo la imagen del video
iBytesRead = FileRead(iFileHandle, pszJPG, (int)pszBuffer);
FileClose(iFileHandle);
}catch(Exception *e) {ShowMessage("Problemas");}
//intento meterla en el MemoryStream y representarla
imagen->WriteBuffer(&pszJPG,iBytesRead);
Image1->Picture->Bitmap->LoadFromStream(imagen);
Seguro que tendré unos cuantos fallos, un saludo.
Punishero |
|
| Volver arriba |
|
 |
Punishero Cdt

Registrado: 11 Nov 2004Mensajes: 5
|
Publicado: Vie 19 Nov, 2004 6:13 pm Asunto: Ya está solucionado |
|
|
Bueno aunque parece que no haya causado mucho furor mi duda, explico la solución por si alguien en el futuro se encuentra con algo parecido.
El error estaba al leer la cabecera de la primera imagen JPEG que se encuentra en los 5 primeros bytes del archivo. Yo lo hacía así:
//leo los primeros 5 bytes del video(=tam primera imagen)
iBytesRead = FileRead(iFileHandle, pszBuffer, puntero);
//creo buffer para meter la imagen
pszJPG = new char [(int)pszBuffer];
//leo la imagen del video
iBytesRead = FileRead(iFileHandle, pszJPG, (int)pszBuffer);
pues al leer esos 5 bytes lo que debía hacer era:
IntToStr(pszBuffer[0])-> contiene el numero ASCII de las decenas de millar del tamaño de la imagen.
Si a IntToStr(pszBuffer[0]) restamos Integer('0') (codigo ASCII del cero) obtendremos el numero en decimal.
Si hacemos el mismo procedimiento con pszBuffer[1],..., pszBuffer[4] obtendremos el tamaño de la primera imagen:
int tam=(pszBuffer[0]-Integer('0'))*10000+(pszBuffer[1]-Integer('0'))*1000+(pszBuffer[2]-Integer('0'))*100+(pszBuffer[3]-Integer('0'))*10+pszBuffer[4]-Integer('0');
con:
pszJPG = new char[tam];
iBytesRead = FileRead(iFileHandle, pszJPG, tam);
tendremos la foto en el buffer pszJPG y podremos hacer con ella lo que queramos.
Un saludo, Punishero.  |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|