FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Error usando TMemoryStream
Hola, al ejecutar mi aplicacion me da una excepcion, una violacion de acceso a memoria justo al ejecutar Str.Write(p,tamanyo), donde p es un puntero (pointer) al inicio de donde teno en memoria una imagen y tamanyo es el tamaño de la imagen. Previamente he hecho Tamanyo:=sFormat.lFrameSize; Los valores qeu he pasado (tamaño y puntero) son correctos, y sFormat es de tipo TMemoryStream.
El codigo que uso es el siguiente procedure CargaImagen(p: pointer; Tamanyo: Integer; AImage: TImage) var Str: TMemoryStream; begin Str := TMemoryStream.Create; try Str.Write(p, Tamanyo); AImage.Picture.Bitmap.LoadFromStream(Str); finally Str.Free; end; end; Tanto el tamaño como el puntero los saco de funciones asociadas a la dll de la tarjeta grafica con la que estoy trabajando, una inspecta de mikrotron. Salu2 y muchas gracias. Toni |
#2
|
||||
|
||||
TMemoryStream
Hola. Has probado algo así??
Código:
procedure CargaImagen(p: pointer; Tamanyo: Integer; AImage: TImage) var Str: TMemoryStream; begin Str := TMemoryStream.Create; try Str.Write(p, Tamanyo); Str.Position := 0; //Lo nuevo... AImage.Picture.Bitmap.LoadFromStream(Str); finally Str.Free; end; end; Saludos.
__________________
"Es imposible hacer un programa 100% contra tontos, ya que éstos son muy ingeniosos"
|
#3
|
|||
|
|||
No lo he probado, de todas maneras Str.Position := 0; , deberia ir antes de Str.Write(p, Tamanyo);, para indicar a partir de donde quiero escribir, ¿no te parece?. Lo probare a ver si asi me funciona.
Muchas Gracias. Toni |
|
|
|