Via Cà Matta 2 - Peschiera Borromeo (MI)
+39 02 00704272
info@synaptica.info

Determinare il formato di un immagine in uno Stream in Delphi

Digital Innovation Partner

Determinare il formato di un immagine in uno Stream in Delphi

Determinare di che formato è un’immagine in uno stream è un problema comune, in questo esempio il codice è scritto in Delphi ma come concetto è facilmente trasportabile in qualsiasi altro formato.
Nei primi bytes di un’immagine di qualsiasi formato viene messa una firma che identifica lo stesso in modo univo, nell’esempio ci limitiamo ad inserire i formati JPEG, PNG e GIF.

Nell’esempio specifico, una procedura che legge l’immagine da un memoryStream passato come parametro, e popola un TPicture che è la classe basse dei componenti TImage (quelli appunto per vedere le immagini a video) capendo il formato dal contenuto dello stream e istanziando la classe di gestione relativa.


procedure getImage(FS : TMemoryStream; Picture: TPicture);
var

  FirstBytes: AnsiString;
  Graphic: TGraphic;
begin
  Graphic := nil;

  try
    SetLength(FirstBytes, 8);
    FS.Read(FirstBytes[1], 8);
    if Copy(FirstBytes, 1, 2) = 'BM' then
    begin
      Graphic := TBitmap.Create;
    end else
    if FirstBytes = #137'PNG'#13#10#26#10 then
    begin

      Graphic := TPNGObject.Create;
    end else
    if Copy(FirstBytes, 1, 3) =  'GIF' then
    begin
//      Graphic := TGIFImage.Create;
      raise exception.Create('GIF non supportate al momento');
    end else
    if Copy(FirstBytes, 1, 2) = #$FF#$D8 then
    begin
      Graphic := TJPEGImage.Create;
    end;
    if Assigned(Graphic) then
    begin
      try
        FS.Seek(0, soFromBeginning);
        Graphic.LoadFromStream(FS);
        Picture.Assign(Graphic);
      except
      end;
      Graphic.Free;
    end;
  finally
    FS.Free;
  end;
end;

Tags: , , ,

Lascia un commento