Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ¿Como puedo compilar una imagen y que el programa la busque en una ruta? (https://www.clubdelphi.com/foros/showthread.php?t=88360)

viejinho 26-05-2015 08:34:37

¿Como puedo compilar una imagen y que el programa la busque en una ruta?
 
En una consulta anterior clubdelphi.com/foros/showthread.php?t=88138 pregunte como hacer que al hacer clic en un botón una imagen cambiara, la respuesta que me dieron era con este comando
Código Delphi [-]
Image1.Picture.LoadFromFile('nombredelaimagen.jpg');
Y me funciono de la perfección, el problema es que ahora el .exe siempre tiene que ir acompañado de la carpeta con las imágenes, porque si no esta la carpeta con las imágenes me dice que no las encuentra.

¿Hay alguna forma de que la imagen este dentro del programa y no me pida las imágenes que se cargaran al presionar un botón?

Neftali [Germán.Estévez] 26-05-2015 09:57:13

Para eso puedes usar RECURSOS. De esa forma las imágenes se "compilan" o se añaden al EXE del programa.
Lo único que hay que hacer es cambiar la carga de la imagen desde disco, para hacerla desde el recurso.

Según el número, tamaño y cantidad de la imágenes debes plantate si esta opción es adecuada.

Para iconos, imágenes pequeñas o número reducido puede ser apropiado, si estamos hablando de muchas imágenes o de gran tamaño no te lo recomendaría.

En este tema se habla de ello. Aunque si buscas más por los términos "imagen recursos .RC" seguro que salen más...

ecfisa 26-05-2015 10:03:39

Hola viejinho.

Algunos enlaces que te serán útiles para agregar datos a tu ejecutable:
Saludos :)

Edito: No ví el último mensaje mientras componía este, pero es la misma idea que te sugiere Neftali.

viejinho 03-06-2015 10:05:36

Muchas gracias, me funciono, sola una ultima duda.
Yo usaba
Código Delphi [-]
Image1.Picture.LoadFromFile('imagen.jpg');

Para cargar los Jpg, ahora con los recursos ya no se como se hace, se hacerlo con imagenes bmp usando el siguiente código:

Código Delphi [-]
Image1.Picture.Bitmap.LoadFromResourceName(hInstance,'imagen');

Pero para usarlo con jpg ¿como le hago? intente remplazando Bitmap por JPEG y por Graphic y en ninguna funciona.

PD: También me gustaría saber hacerlo con GIF y PNG.

Neftali [Germán.Estévez] 03-06-2015 11:26:50

Cita:

Empezado por viejinho (Mensaje 492833)
Pero para usarlo con jpg ¿como le hago? intente remplazando Bitmap por JPEG y por Graphic y en ninguna funciona.

Mismo código, pero prueba a añadir la unit JPEG al uses.

viejinho 03-06-2015 16:46:09

Cita:

Empezado por Neftali (Mensaje 492835)
Mismo código, pero prueba a añadir la unit JPEG al uses.

Gracias por responder pero no me sirve ya agregue JPEG al uses pero me salen estos errores:

[Error] Unit1.pas(30): Illegal character in input file: '*' ($A0)
[Fatal Error] Project1.dpr(6): Could not compile used unit 'Unit1.pas'

Si le cambio el Bitmap por JPEG salen los mismos 2 errores mas el siguiente:

[Fatal Error] Project1.dpr(6): Could not compile used unit 'Unit1.pas'

nlsgarcia 03-06-2015 19:09:29

viejinho,

Cita:

Empezado por viejinho
...Para cargar los Jpg, ahora con los recursos ya no se como se hace...

:rolleyes:

Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, jpeg;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Image1: TImage;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
{$R Universe_Images.res}

procedure TForm1.Button1Click(Sender: TObject);
var
   RS : TResourceStream;
   ImageJpg : TJPEGImage;

begin

   try

      RS := TResourceStream.Create(hInstance, '#1', RT_RCDATA);

      ImageJpg := TJPEGImage.Create;
      ImageJpg.LoadFromStream(RS);

      Image1.Center := True;
      Image1.Stretch := True;
      Image1.Align := alClient;
      Image1.Picture.Graphic := ImageJpg;

   finally

      RS.Free;
      ImageJpg.Free;

   end;

end;

end.
El código anterior en Delphi 7 sobre Windows 7 Professional x32, Carga una imagen JPG contenida en un archivo de recursos en un componente TImage, como se muestra en la siguiente imagen:



Espero sea útil :)

Nelson.

viejinho 03-06-2015 19:22:42

Cita:

Empezado por nlsgarcia (Mensaje 492843)
viejinho,


:rolleyes:

Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, jpeg;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Image1: TImage;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
{$R Universe_Images.res}

procedure TForm1.Button1Click(Sender: TObject);
var
   RS : TResourceStream;
   ImageJpg : TJPEGImage;

begin

   try

      RS := TResourceStream.Create(hInstance, '#1', RT_RCDATA);

      ImageJpg := TJPEGImage.Create;
      ImageJpg.LoadFromStream(RS);

      Image1.Center := True;
      Image1.Stretch := True;
      Image1.Align := alClient;
      Image1.Picture.Graphic := ImageJpg;

   finally

      RS.Free;
      ImageJpg.Free;

   end;

end;

end.
El código anterior en Delphi 7 sobre Windows 7 Professional x32, Carga una imagen JPG contenida en un archivo de recursos en un componente TImage, como se muestra en la siguiente imagen:

Espero sea útil :)

Nelson.

Muchas gracias por responder, ¿como tendría que compilar la imagen en un recurso para ese código? Yo tengo compilada mi imagen del siguiente modo:

Cita:

#1 JPEG imagen.jpg
¿Tendría que compilarlo cambiando JPEG por RCDATA o por RC_DATA?

Disculpen las molestias, pero soy muy principiante, también me gustaría saber que cambiar en el código para usar otros formatos.

nlsgarcia 03-06-2015 19:55:05

viejinho,

Cita:

Empezado por viejinho
...¿Tendría que compilarlo cambiando JPEG por RCDATA o por RC_DATA?...soy muy principiante...

:rolleyes:

Revisa esta información:
Espero sea útil :)

Nelson.

ecfisa 03-06-2015 21:28:54

Cita:

Empezado por viejinho (Mensaje 492844)
¿Tendría que compilarlo cambiando JPEG por RCDATA o por RC_DATA?

Tres ejemplos concretos mas (sonido, imágen y font) :
Saludos :)


La franja horaria es GMT +2. Ahora son las 00:12:30.

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