Une sorte d ' "imagelist" de jpeg

0/5 (8 avis)

Vue 8 173 fois - Téléchargée 584 fois

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

Ajouter un commentaire Commentaires
Messages postés
20
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
1 avril 2007

bon salut je suis lamane
j'ai travailler comme toi mais avec le sgbd ORACLE 9i
mais le probleme est que des le traitment des jpeg je n'est rien trouver comme moyen que le passage par le bmp tandis que mes image jpeg sont de taill imense

(9Mo)alors immagéner sont transfert paar le bmp commbien sa donne (94 Mo) s'ilte plait aider moi a decouper ces jpeg et stocker ces decoup dans une base de donnéer ou bien dans le disk

le message d'erreur que me revient est ESPACE INSUFFISANT POUR TRAITER CETTE COMMANDE
et mercie pour tou
email othbel@yahoo.fr
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
17
Kenavo > Tu avais tout-à-fait raison. J'y ai donc ajouté une gestion de masque. Excusez le masque que j'ai fait à la Barbare. Mais c'est juste pour l'honneur!

japee> ;) ... "Ad honores", quoi! Hahahahaha!
Messages postés
702
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
1 octobre 2009
4
Salut,
Il ne faut pas oublier quand même, que le TImageList a bien des fonctions qui en font autre chose qu'un simple tableau d'images.
Il y a en particulier la gestion des masques qui te permet, par exemple, si tu as l'image d'un concombre, d'obtenir un concombre masqué ! Bretzel liquide ! (Désolé, mes références littéraires ne sont pas au niveau de celles de Japee !)
Messages postés
1725
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
11 avril 2021
8
Ce code permet de fixer ce que l'on savait déjà, et de mettre au point ce qu'on croyait savoir...
Donc, on progresse.
Bref, tout le contraire de ce que pourrait évoquer ton pseudo *
Bravo, Caribensila !

* pour ceux qui n'ont jamais fait de latin, les bienheureux, voir "Charybde" sur le petit Larousse familial, lol.
Et ne parlons pas de la manière dont l'histoire est enseignée de nos jours dans nos beaux collèges, s'il vous plait... ;)
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
17
Ouais. Sauf qu'il faudra écrire:

Bmp.Assign(Image1.Picture.Bitmap);
ou
Bmp.Assign(Image1.Picture.Graphic);

Ou même

Jpeg.Assign(Image1.Picture.Bitmap);
ou
Jpeg.Assign(Image1.Picture.Graphic);

Sauf erreur, tout cela est faisable...
Afficher les 8 commentaires

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.