FILTRE GRAPHIQUE : INVERT ET GREYSCALE

cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014 - 1 sept. 2002 à 03:00
cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 - 1 sept. 2002 à 20:45
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/12123-filtre-graphique-invert-et-greyscale

cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
1 sept. 2002 à 20:45
DelphiCool : Ah oui effectivement il devait parler du zip...

Max12 : pour que le zip ne soit pas gros il suffit de prendre le fichiers suivants :
*.dpr
*.res
*.dfm
*.pas

Les fichiers *.~dfm *.~pas *.~dpr ne sont que des copies de sauvegarde et ne sont pas utiles dans le ZIP.
cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014
1 sept. 2002 à 18:36
Sa va j'ai trouver comment
cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014
1 sept. 2002 à 18:31
Undeclared Identifier MonGetPixel, comment j'arrange sa (Newbie)
cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014
1 sept. 2002 à 18:25
Donc jpeut supprimer le dfm et sa change rien.......
Sinon merci tlm, Le code sert a faire comprendre la méthode de l'effet
DelphiCool Messages postés 455 Date d'inscription mardi 24 juillet 2001 Statut Membre Dernière intervention 10 mars 2009
1 sept. 2002 à 17:27
nono, je ne crois pas qu'il parle de la taille de l'exe, mais de celle du zip.

la taille est grosse car le fichier .dfm contien l'image,
et de plus il est 2 fois car il n'a pas enlevé le .~dfm

donc 2 fois 1,64 Mo
cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
1 sept. 2002 à 13:23
Pixels[] c'est pratique mais c'est lent... Si tu utilise ton code sur des images à 24 bits par pixel ( ce qui est le cas des photos, jpeg et autres ... ) je te conseille de ne pas utiliser Pixels[] et de les remplacer par :

** En lecture d'un pixel :
Function MonGetPixel(Image:TImage;x,y:Integer):TColor;
Begin
Result:=0;
Move(PByteArray(Image.Picture.Bitmap.ScanLine[y])^[x*3],Result,3);
End;

** En écriture d'un pixel :
Procedure MonSetPixel(Image:TImage;x,y:Integer;C:TColor);
Begin
Move(C,PByteArray(Image.Picture.Bitmap.ScanLine[y])^[x*3],3);
End;

Il suffit de remplacer Couleur := Image1.Canvas.Pixels[X, Y];
Par Couleur := MonGetPixel(Image1,x,y);
et Image1.Canvas.Pixels[X, Y] := Couleur;
Par MonSetPixel(Image1,x,y,couleur);
Par contre il faut ajoute Image1.Refresh en fin de procédure, car le TImage n'est pas averti que l'image est changée dans le Bitmap avec cette méthode...

C'est environ 10 fois plus rapide...

Une petite explication : ScanLine fourni un tableau de pointeurs sur chaque ligne d'un Bitmap et mémoire. Une ligne est alors considérée comme une suite de pixels occupant trois octet chacun. L'ordre est le même que dans TColor : rouge,vert,bleu.

Quant au 221Ko pour le fichier .EXE, c'est normal avec Delphi. Dès que tu utilises une fiche, l'application est au minimum de 200Ko car Delphi ajoute toutes les bibliothèques utilisées.

Nono
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
1 sept. 2002 à 09:57
J'ai un autre truc pour l'invert :
procedure TForm1.Button1Click(Sender: TObject);
begin

InvertRect(GetWindowDC(Form1.Handle), Form1.ClientRect);

end;

Il suffit juste de remplacer Form1.ClientRect par une variable TRect initialisée avec les "coordonnées" de Image1...

Et si tu utilises dans ton prog des régions, tu peux utiliser InvertRgn(DC: hDC; Rgn: hRgn);
cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014
1 sept. 2002 à 03:00
221 ko pour sa ? Ya pas moyen de rendre sa moin lourd ?
Rejoignez-nous