cs_Nono40
Messages postés962Date d'inscriptionmercredi 3 avril 2002StatutMembreDernière intervention12 septembre 20062 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és1491Date d'inscriptiondimanche 19 novembre 2000StatutModérateurDernière intervention 7 juillet 2014 1 sept. 2002 à 18:36
Sa va j'ai trouver comment
cs_max12
Messages postés1491Date d'inscriptiondimanche 19 novembre 2000StatutModérateurDernière intervention 7 juillet 2014 1 sept. 2002 à 18:31
Undeclared Identifier MonGetPixel, comment j'arrange sa (Newbie)
cs_max12
Messages postés1491Date d'inscriptiondimanche 19 novembre 2000StatutModérateurDerniè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és455Date d'inscriptionmardi 24 juillet 2001StatutMembreDernière intervention10 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és962Date d'inscriptionmercredi 3 avril 2002StatutMembreDernière intervention12 septembre 20062 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és833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 1 sept. 2002 à 09:57
J'ai un autre truc pour l'invert :
procedure TForm1.Button1Click(Sender: TObject);
begin
1 sept. 2002 à 20:45
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.
1 sept. 2002 à 18:36
1 sept. 2002 à 18:31
1 sept. 2002 à 18:25
Sinon merci tlm, Le code sert a faire comprendre la méthode de l'effet
1 sept. 2002 à 17:27
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
1 sept. 2002 à 13:23
** 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
1 sept. 2002 à 09:57
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);
1 sept. 2002 à 03:00