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!
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.