Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Problemas con Streams e Imágenes (https://www.clubdelphi.com/foros/showthread.php?t=21167)

Elfoscuro 09-05-2005 16:16:14

Problemas con Streams e Imágenes
 
Hola.

Tengo un pequeño problema con un código muy simple (algo bastante común en mi, fallar en lo más fácil). Tengo este código:

Código Delphi [-]
unit Visor_Imagen_OBJ;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, ExtCtrls, jpeg;
type
  TVisor_Imagen = class(TForm)
    Image1: TImage;
    Status: TStatusBar;
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
      fImagen:array of byte;
    { Public declarations }
  end;
var
  Visor_Imagen: TVisor_Imagen;
implementation
{$R *.dfm}
procedure TVisor_Imagen.FormShow(Sender: TObject);
var St:TMemoryStream;
    f:longint;
    jp: TJPEGImage;
    TipoImagen,LongDesc:byte;
    Desc:String;
    Posicion:longint;
begin
  Posicion:=0;
  Desc:='';
  TipoImagen:=fImagen[Posicion];
  inc(Posicion);
  LongDesc:=fImagen[Posicion];
  inc(Posicion);
  if LongDesc>0 then
      begin
        for f:=1 to LongDesc do
          begin
            Desc:=Desc+chr(fImagen[Posicion]);
            inc(Posicion);
          end;
      end
    else
      Desc:='Inlay Card';
  Status.SimpleText:=Status.SimpleText+' '+Desc;
  St:=TMemoryStream.Create;
  for f:=Posicion to length(fImagen)-1 do
    St.write(fImagen[f],1);
 St.Position:=0;
  jp := TJPEGImage.Create;
  try
    with jp do
    begin
      LoadFromStream(St);
      savetofile('prueba.jpg');  // ********************* 1
      Assign(Image1.Picture.Bitmap);
    end;
  finally
    jp.Free;
  end;
  St.Free;
end;
end.

La idea es que la form cargue un array de bytes (que le manda el programa principal) y lo descompone en varias partes, un string, varios integer, y una imagen, que cargo en un memorystream. La imagen es un JPG tal cual.

El caso es que la creación del stream y el traspaso al JPG lo hace bien. Lo compruebo en la línea marcada. El fichero prueba.jpg se abre perfectamente desde cualquier visor de imágenes.

Pero sin embargo, el TImage que tengo en pantalla (Image1), no muestra nada. ¿Que puede estar fallando?

Saludos

Neftali [Germán.Estévez] 09-05-2005 16:56:30

Tal vez lo estés haciendo al revés, prueba con:

Código Delphi [-]
  Image1.Picture.Bitmap.Assign(jp); 
 o éste
   Image1.Picture.Assign(jp);

Elfoscuro 09-05-2005 19:42:26

Vale, o sea, que lo que estaba haciendo era meterle al jpeg el contenido del image1, con lo que no solo no estaba dibujando la imagen, sino que estaba borrando el jpeg... ¿no?

Si es que hay dias en lo que uno debería quedarse en la cama ;-)

Saludos y gracias.


La franja horaria es GMT +2. Ahora son las 14:57:54.

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