Une sorte d ' "imagelist" de jpeg

Description

TImageList représente une collection d'images de tailles identiques pouvant chacune être désignée par son indice. C'est bien pratique, mais ce compo présente l'inconvénient de stocker de lourds Bitmap. De plus, ils doivent être tous de la même taille.
Voici une alternative présentant la même souplesse qu'un" ImageList", sans ses inconvénients.
Cette application charge une image jpeg, la met dans la première cellule du tableau. Puis découpe cette image en 12 parties pour stocker chacune de ces parties dans les 12 cellules suivantes du tableau.

===========================
J'ai ajouté une gestion de masque.
Ca ressemble de plus en plus à un ImageList, non? ;)

Source / Exemple :


implementation

uses  jpeg;

{$R *.dfm}

var
      Tablo_Jpeg : array[1..14] of TJPEGImage;

procedure TForm1.FormCreate(Sender: TObject);
  var
      i,X,Y   : Integer;
      MonJPG  : TJPEGImage;
      RectSrc : TRect;
      MonBMP,MonMasque : TbitMap;
  begin
  if (FileExists(ChangeFileExt(Application.ExeName,'_ima1.jpg')))
     and (FileExists(ChangeFileExt(Application.ExeName,'_masque.jpg')))
     then begin
    MonJPG   := TJPEGImage.Create;
    MonBMP   := TbitMap.Create;
    MonMasque:= TbitMap.Create;
    try
      MonJPG.LoadFromFile(ChangeFileExt(Application.ExeName,'_ima1.jpg'));
      Tablo_Jpeg[1] := TJPEGImage.Create;
      Tablo_Jpeg[1].Assign(MonJPG); //La totalité du JPG dans la 1ère cellule.
      MonBMP.Assign(MonJPG);        //JPG -> Bmp Pour le bricoler.
      i:=2;

      {=== Découpe du Bmp en 12 morceaux. ===}

      for Y:=0 to 2 do begin
        for X:=0 to 3 do begin
          RectSrc:=Rect(X*100,Y*100,X*100+99,Y*100+99);
          Image1.Canvas.CopyRect(Rect(0,0,99,99),MonBMP.Canvas,RectSrc);
          Tablo_Jpeg[i] := TJPEGImage.Create;
          Tablo_Jpeg[i].Assign(Image1.Picture.Bitmap); //1 morceau de Bmp -> Jpg.
          Inc(i);
        end;
      end;

      {=== Chargement d'une image masquée dans Tablo_Jpeg[14] ===}

      MonJPG.LoadFromFile(ChangeFileExt(Application.ExeName,'_masque.jpg'));
      MonMasque.Assign(MonJPG);        //pour travailler avec un Bmp
      MonBMP.Assign(Tablo_Jpeg[1]);    //La totalité du JPG
      MonMasque.Transparent := true;
      MonMasque.TransparentColor:=MonMasque.Canvas.Pixels[180,60];
      MonBMP.Canvas.Draw(0,0,MonMasque);
      MonBMP.Transparent:=true;
      Tablo_Jpeg[14] := TJPEGImage.Create;
      Tablo_Jpeg[14].Assign(MonBMP);
    finally
      FreeAndNil(MonJPG);
      FreeAndNil(MonBMP);
      FreeAndNil(MonMasque);
    end;
  end;
   Image1.Picture := nil; //Effacer le compo Image1.
end;

procedure TForm1.BtnSuivantClick(Sender: TObject);
  begin
  BtnSuivant.Tag   := BtnSuivant.Tag + 1;
  if BtnSuivant.Tag = 15 then BtnSuivant.Tag := 1;
  Edit1.Text:='Tablo_Jpeg[' + IntToStr(BtnSuivant.Tag) + ']';
  image1.Picture.Assign(Tablo_Jpeg[BtnSuivant.Tag]);
end;

procedure TForm1.FormDestroy(Sender: TObject);
  var
        i : Integer;
  begin
  for i:=1 to 14 do FreeAndNil(Tablo_Jpeg[i]);
end;

end.

Conclusion :


Ce n'est pas compliqué, mais ça peut être utile, je pense.

Bonne prog!

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.