Hola,
Pues... del código que has mostrado últimamente, ya digo, lo único que hecho en falta es la asignación de la propiedad "Parent" del "TImage":
Código Delphi
[-]
Image1 := TImage.Create(self);
Image1.Picture.LoadFromFile('corazon.jpg');
Image1.Height := 17;
Image1.Width := 17;
Image1.Top := 32;
Image1.Left := 152;
Parent := Self;
Sin embargo... veo algo extraño en el código, y es el identificador "Image1". Normalmente, estos identificadores corresponden a componentes creados en tiempo de diseño, por el propio Delphi, mediante la técnica de arrastrar un componente desde el Inspector de Objetos a un determinado formulario.
Si lo que haces es esto último, entonces no es que falte algo en tu código, sino que tal vez sobre. En efecto, no necesitas crear un componente que ha sido añadido en tiempo de diseño, porque el propio entorno se encargará de crearlo. Es decir, entonces en tu código sobraría esta instrucción:
Código Delphi
[-]
Image1 := TImage.Create(self);
Ya tienes el componente en el formulario, luego, no necesitas crearlo. Dándole vueltas, creo que he pasado por alto esto de tu primer mensaje: "ya que destruyo y vuelvo a crear la imagen varias veces." Si lo que necesitas es cargar distintas imágenes en un mismo "TImage", simplemente, cárgalas, usa el "Picture.LoadFromFile()", sucesivamente, puesto que las imágenes, si no me equivoco, no se solapan, sino que la última sustituirá a la que hubiera antes.
PD. Tal vez podría añadirse algo que no parece muy evidente. Para "quitar" una imagen de un componente "Timage", no hay ningún método preparado, pero, en su lugar puede usarse algo así:
Esa instrucción no destruirá el objeto "TImage", de modo que podrá cargarse en el mismo una nueva imagen (o no).