Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Crear componente Image en tiempo d Ejecucion (https://www.clubdelphi.com/foros/showthread.php?t=10797)

Jessica666 28-05-2004 23:09:31

Crear componente Image en tiempo d Ejecucion
 
Hola a todos y gracias por la colaboracion que puedan prestarme.

Necesito saber como puedo hacer para crear un componente Image y cargar una imagen o bitmap en el, en tiempo de ejecucion, lo que pasa es que estoy conviertiendo un video en bitmaps pero tengo que mostrar cada uno de los bitmaps por separado en un Image diferente entonces necesito crear uno por cada bitmap que me vaya creando la conversion(Video a Bimaps).

Agradezco cualquier colaboracion ya que no se mucho del Tema.

Atte:
Una Jessica Confundida
:confused: :confused: :confused: :confused: :confused: :confused:

gatosoft 28-05-2004 23:39:16

Código:

var vImagen: TImage;

 if not OpenDialog1.Execute then
  exit;

vImagen:=TImage.Create(Self);
vImagen.Picture.LoadFromFile(OpenDialog1.FileName);
        {Cargas la imagen del archivo que escojas con el OpenDialog}

{Configuras las demas propiedades}

vImagen.top:= ... 
vImagen.Left:= ...

{etc}

vImagen.Parent:=Self;
        {Le dices que el obejto que lo contiene es el formulario actual}

si en lugar de cargar la imagen de un archivo quisieras copiarla de alguna variable que tuvieras por ahi... por ejemplo en otro Timage, entonces:

Código:

  vImagen.Picture.Assign(image1.picture);
O si lo tuvieses en una variable de tipo TBitmap:

Código:

  vImagen.Picture.bitmap.Assign(VariableBMP);

Jessica666 29-05-2004 08:56:27

Crear componente Image en time de ejecucion
 
Gracias por la colaboracion Bebe gatosoft

Resulta que ingreso lo que tu me envias y me saca un error de declaracion del image y ya lo tengo declarado, te voy ha enviar un peazo del codigo que me convierte el video en los bitmaps, y tu lo revisas, bueno si puedes, te lo agardeceria en el alma, ese codigo si tu lo corres, veras que toma un video y lo convierte en frames de bitmaps, lo que necesito es que cada uno de esos bitmaps me lo despliegue en un tImage diferente, ese el el gallo.

procedure TFrmVisualizarKVNN.BitBtn5Click(Sender: TObject);
var
Bitmap: TBitmap;
i : integer;
begin
begin
for i := 1 to MediaPlayer1.Length do
begin
Edit3.Text := IntToStr(i);
MediaPlayer1.StartPos := i;
MediaPlayer1.EndPos := i;
MediaPlayer1.Play;
Bitmap := TBitmap.Create;
Try
Bitmap.Width := Panel1.Width;
Bitmap.Height := Panel1.Height;
Bitmap.PixelFormat := pf24bit;
Bitmap.Canvas.CopyRect(Bitmap.Canvas.ClipRect,
FrmvisualizarKVNN.Canvas,
Rect(Panel1.Left,
Panel1.Top,
Panel1.Left + Bitmap.Width,
Panel1.Top + Bitmap.Height));
Image1.Picture.Bitmap := Bitmap;
Bitmap.SaveToFile(IntToStr(i) + '.BMP'); //CLAVE
finally
Bitmap.Free
end;
Sleep (250); //250
Application.ProcessMessages
end
end
end;

Por favor cualquier ayuda, es que en realidad no se mucho de tratamiento de imagenes y videos...

:confused: :confused: :confused: :confused: :confused: :confused:

DarkByte 29-05-2004 11:31:53

Recuerda usar las etiqueta [ Delphi ] y [ / Delphi ] (sin espacios ) cuando vayas a escribir código en Delphi. Tampoco estaría de más que intentases identar el código.

Lo idento y pongo yo las etiquetas para que el que quiera responder vea más claro el código.

Código Delphi [-]
procedure TFrmVisualizarKVNN.BitBtn5Click(Sender: TObject);
 var
   Bitmap: TBitmap;
   i : integer;
 begin
//begin , aquí hay dos begin y no se a que vienen...
   for i := 1 to MediaPlayer1.Length do
     begin
       Edit3.Text := IntToStr(i);
       MediaPlayer1.StartPos := i;
       MediaPlayer1.EndPos := i;
       MediaPlayer1.Play;
       Bitmap := TBitmap.Create;
     Try
       Bitmap.Width := Panel1.Width;
       Bitmap.Height := Panel1.Height;
       Bitmap.PixelFormat := pf24bit;
       Bitmap.Canvas.CopyRect(Bitmap.Canvas.ClipRect,
       FrmvisualizarKVNN.Canvas,
       Rect(Panel1.Left,
           Panel1.Top,
           Panel1.Left + Bitmap.Width,
           Panel1.Top + Bitmap.Height));
       Image1.Picture.Bitmap := Bitmap;
       Bitmap.SaveToFile(IntToStr(i) + '.BMP'); //CLAVE
     finally
       Bitmap.Free
     end;
 Sleep (250); //250
 Application.ProcessMessages
 end
//end ¿¿y este otro end??
end;

Había partes que al identar me han sonado rara, los he puesto como comentarios, por si son necesarias pero yo no alcanzo para comprender su porqué.

Jessica666 29-05-2004 18:46:25

Crear Componente en tiempo de ejecucion 3
 
Muchas gracias por la aclaracion de las etiquetas y por lo de la indentada, la verdad es que todo mi codigo esta indentado pero al copiar y pegar sin usar las etiquetas quedo asi de horrible, pero no creas que soy tan desordenada como para tener un codigo, completamente apartir de la linea inicial, si ese fuera mi nivel ni siquiera estaba en un foro delphi, ahh y si, es un solo Begin es solo que antes estaba tratando de hacer algo y por eso inclui otro begin y otro end por supuesto....

Muchas gracias en verdad ppor las correcciones y por publicarme de nuevo el codigo.

Ahora ya aclarado todo me gustaria saber si puedes ayudarme....


Por favor
:confused: :confused: :confused: :confused: :confused: :confused:

jachguate 29-05-2004 19:18:12

Hola.

Si ya has entendido como crear un TImage en tiempo de ejecución, lo único que está pendiente es añadir el código necesario en lugar de la asignación que haces ahora al único TImage disponible.

Donde dice image1.Picture.Bitmap := Bitmap;

Además, podes quitar la línea SaveToFile si no te interesa guardarlo a un archivo bmp.

Intentalo por vos misma, y volve aqui con dudas mas puntuales.

Hasta luego y que te vaya bien...

;)

gatosoft 30-05-2004 01:58:22

Hola Jessica, revisé tu codigo y no me dio ningun error.

Abri un nuevo proyecto, puse un Tpanel, un Tedit, un TMediaPalyer y un TIMAGE.

Lo ejecute y me generó como 300 archivos bmp. (afortunadamente era un clip de video.) :p

Dices que el error que te sale tiene que ver con la declaracion del ¿TImage?, supongo entonces que no tienes un componente TImage dentro de tu formulario sino que lo declaraste como variable.

y no veo donde lo creas.
entonces modifiqué tu codigo , dejando en el formulario el panel, el mediaplayer y el edit y declarando el Timage como una variable, asi:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
Bitmap:  TBitmap;
i     :  integer;
vImagen:TImage;
begin
vImagen:=TImage.Create(Self);
      for i := 1 to MediaPlayer1.Length do
       begin
          Edit3.Text := IntToStr(i);
          MediaPlayer1.StartPos := i;
          MediaPlayer1.EndPos   := i;
          MediaPlayer1.Play;
          Bitmap := TBitmap.Create;
       Try
         Bitmap.Width  := Panel1.Width;
         Bitmap.Height := Panel1.Height;
         Bitmap.PixelFormat := pf24bit;
         Bitmap.Canvas.CopyRect(Bitmap.Canvas.ClipRect,
                             Self.Canvas,
                             Rect(Panel1.Left,
                                  Panel1.Top,
                                  Panel1.Left + Bitmap.Width,
                                  Panel1.Top  + Bitmap.Height));
         vImagen.Picture.Bitmap := Bitmap;
         Bitmap.SaveToFile(IntToStr(i) + '.BMP');//CLAVE
       finally
              Bitmap.Free
       end;
       Sleep (250);  //250
       Application.ProcessMessages;
   end;
vImagen.Free;
end;

Revisa y me cuentas.


La franja horaria es GMT +2. Ahora son las 06:13:26.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi