Message de sauvegarde

Résolu
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 - 15 janv. 2007 à 13:54
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 - 17 janv. 2007 à 19:23
Bonjour à tous,

Est t'il possible de mettre un message d'avertissement au cas ou le fichier bmp ou jpg existerait avant de sauvegarder le nouveau fichier.

Voici le code que j'utilise :

procedure TForm1.BenregistrerClick(Sender: TObject);
var
  nomfich : string;
  ext     : string;
  JP  : TJPEGImage;
begin
    if savepicturedialog1.execute then
  begin
    ext :=uppercase(extractfileext(savepictureDialog1.FileName));    if Not ((ext '.BMP') or (ext '.JPG')) then
    begin
     showmessage('L''extension du fichier n''est pas correcte, soit en jpg ou en bmp');
     exit;
    end;
    if ext = '.BMP' then
      image1.picture.savetofile(savepictureDialog1.FileName)
    else
    if ext = '.JPG' then
    begin
      JP := TJPEGImage.Create;                  try
        JP.CompressionQuality := 90;  
        JP.ProgressiveEncoding := false;
       // JP.ProgressiveEncoding := true;  au choix
        JP.Assign(image1.picture.bitmap);     
        JP.SaveToFile(savepictureDialog1.FileName);  // enregistrement
      finally
        JP.Free;                            
      end;
    end;
  end;
end;

Merci d'avance.

Cincap
[url]mailto:/url

10 réponses

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
15 janv. 2007 à 14:17
Salut,

tout simplement en mettant la propriété : ofOverwritePrompt     de ton SavePictureDialog à True

 
@+
Cirec

<hr size="2" />
3
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
15 janv. 2007 à 23:42
tiens y'a beaucoup plus court et aussi un exemple de comment ajouter des formats a la compilation ce qui peut etre pas mal quand on diffuse la source... :

{ -- use PNG format -- remove/insert double-slash}
{//$DEFINE SAVEPNG}

{$IFDEF SAVEPNG}
  { -- use PNG with PNGImage -- remove/insert double-slash}
    {//$DEFINE PNGLIB1}
  { -- use PNG with zPNG -- remove/insert double-slash}
    {//$DEFINE PNGLIB2}
{$ENDIF}

{$IFDEF SAVEPNG}
   {$IFDEF PNGLIB1}
     {$MESSAGE 'La prise en charge du format PNG est activée avec PNGImage.'}
   {$ELSE}
     {$IFDEF PNGLIB2}
       {$MESSAGE 'La prise en charge du format PNG est activée avec zPNG.'}
     {$ELSE}
       {$MESSAGE warn 'La prise en charge du format PNG est activée avec une librairie inconnue.'}
     {$ENDIF}
   {$ENDIF}
{$ELSE}
   {$MESSAGE warn 'La prise en charge du format PNG est Désactivée.'}
{$ENDIF}

uses Jpeg {$IFDEF PNGLIB1},PNGImage{$ELSE}{$IFDEF PNGLIB2},zPNG{$ENDIF}{$ENDIF};

procedure TForm1.Button1Click(Sender: TObject);
begin
  with SavePictureDialog1 {or SaveDialog1}do begin
     Filter     := 'Bitmap|.bmp|Jpeg|.jpg'{$IFDEF SAVEPNG}+'|Png|.png'{$ENDIF};
     DefaultExt := '.bmp';
     if execute then
        case FilterIndex of
             1 : with TBitmap.Create do
                 try
                   Assign(image1.picture.Graphic);
                   PixelFormat := pf24bit;
                   SaveToFile(ChangeFileExt(FileName,'.bmp'));
                 finally
                   Free;
                 end;

             2 : with TJPEGImage.Create do
                 try
                   CompressionQuality  := 80; {75..85 : best ratio Size/Quality}
                   ProgressiveEncoding := True; {True : good for web or slow computer}
                   Assign(image1.picture.bitmap);
                   SaveToFile(ChangeFileExt(FileName,'.jpg'));
                 finally
                   Free;
                 end;

{$IFDEF SAVEPNG}
  {$IFDEF PNGLIB1}{use PNGImage lib}
             3 : with TPNGObject.Create do
                 try
                   Assign(image1.picture.bitmap);
                   CompressionLevel := 9; {9 : best quality but slow at hell}
                   InterlaceMethod  := imNone;
                   Filters          := [pfAverage];
                   Transparent      := false;
                   RemoveTransparency;
                   SaveToFile(ChangeFileExt(FileName,'.png'));
                 finally
                   Free;
                 end;
  {$ELSE}
    {$IFDEF PNGLIB2}{use zPNG lib}
             3 : with TPNGImage.Create do
                 try
                   Assign(image1.picture.bitmap);
                   CompressionLevel := clBest;
                   PixelFormat      := pf24bit;
                   SaveToFile(ChangeFileExt(FileName,'.png'));
                 finally
                   Free;
                 end;
    {$ELSE}{use Unknow/Custom PNG lib}
             3 : with {INSERT NAME OF YOUR CUSTOM PNG CLASS HERE}.Create do
                 try
                   {INSERT PROPERTIES/PARAMETERS OF YOUR CUSTOM PNG CLASS HERE}
                   SaveToFile(ChangeFileExt(FileName,'.png'));
                 finally
                   Free;
                 end;
    {$ENDIF}
  {$ENDIF}
{$ENDIF}

        end; {case}
  end; {with}
end; {procedure}

<hr size="2" width="100%" />Croc (click me)
3
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 2
17 janv. 2007 à 10:06
@ Foxi,

Ok tout est en ordre, j'ai réinstallé la librairie "Zpng" sans problème et naturellement cela fonctionne, comme quoi...


Merci pour cette méthode très utile surtout pour ceux qui utilisent beaucoup d'applications basées sur les photos.

@+,

Cincap

[url]mailto:/url
3
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 2
15 janv. 2007 à 14:36
Bonjour Cirec,


Décidemment, je pense toujours au plus compliqué.


Tu es toujours prêt à la réponse rapide à croire que tu vis sur le site.

Encore merci de ta réponse.

@+,

Cincap

[url]mailto:/url
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 2
16 janv. 2007 à 19:18
Bonsoir Foxi,

Merci pour ton exemple, comme le png ne fonctionne pas avec cette source, je suppose qu'il faut ajouter à ma librairie un composant (png), je travaille sur D6 et je n'ai jamais réussi à installer celui que j'avais.

A moins que je ne me trompe.

@+,

Cincap

[url]mailto:/url
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
17 janv. 2007 à 00:08
en fait, tu peu copier les code directement, tu verras qu'a la compilation une librairie PNG n'est pas necessaire puisque le format est desactivé grace aux conditions de compilations.

{ -- use PNG format -- remove/insert double-slash}
{//$DEFINE SAVEPNG}

{$IFDEF SAVEPNG}
  { -- use PNG with PNGImage -- remove/insert double-slash}
    {//$DEFINE PNGLIB1}
  { -- use PNG with zPNG -- remove/insert double-slash}
    {//$DEFINE PNGLIB2}
{$ENDIF}

par contre si je fait :

{ -- use PNG format -- remove/insert double-slash}
{$DEFINE SAVEPNG}

{$IFDEF SAVEPNG}
  { -- use PNG with PNGImage -- remove/insert double-slash}
    {$DEFINE PNGLIB1}
  { -- use PNG with zPNG -- remove/insert double-slash}
    {//$DEFINE PNGLIB2}
{$ENDIF}

la il m'en faudrat une ...
<hr size="2" width="100%" />Croc (click me)
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
17 janv. 2007 à 00:09
ah j'oubliais, l'avantage de cette methode c'est que mis a part la taille de la source, la taille de l'executable ne serat pas plus elevée avec le surplus de code.
c'est un bon trucs a savoir donc.

<hr size="2" width="100%" />Croc (click me)
0
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 2
17 janv. 2007 à 08:10
Bonjour,

@ Foxi, j'avais bien compris, mais le filtre *.png n'aparaissant pas dans la sauvegarde, j'en déduit que je dois installer une librairie.

As tu un lien pour cette librairie compatible D6.

Merci.

@+,

Cincap

[url]mailto:/url
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
17 janv. 2007 à 17:26
de rien, en fait, tu as deux lib PNG assé connue : zPNG et PNGImage.

niveau qualitée, je crois qu'elles sont assés proche.

je pense que tu as bien compris l'interet des directives de compilations, c'est vraiment un plus a connaitre et peu de source en parle.

a vrai dire meme, on ne doit etre que 2 ou 3 sur DelphiFr a les manipuler....
mais quand on vois la souplesse que ça ajoute a un source, c'est un peu idiot de passer a coter.

bien sur comme tu peu le voir les possibilitées de la solution que je t'ai donner sont quasiment infinie.
on peu trés bien utiliser la GDI normal et les lib BMP/JPG par defaut, ou utiliser d'autre lib comme la GDI+ ou DirectX ou OpenGL etc.
Tu n'etait par contre pas obliger d'installer une lib PNG, mais c'est aussi un plus a avoir dans delphi, puisque tout compte fait, c'est un format courrant trés utilisé.
un logiciel de traitement d'image devrait toujours posseder ces trois formats de base BMP, JPG, PNG, c'est le minimum.
aprés, on peu aussi ajouter un support PCX, TIFF et TARGA qui sont les 3 formats qui viennent naturellement a la suite.

<hr size="2" width="100%" />Croc (click me)
0
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 2
17 janv. 2007 à 19:23
Bonsoir,

@ Foxi, en effet, j'ai modifié une ancienne application et cette méthode s'intègre facilement.

Très très bien donc de la faire connaître.

Je suppose que pour les autres supports PCX, TIFF et TARGA il faudra aussi une vcl dédiée ? 

Cordialement,

Cincap

[url]mailto:/url
0
Rejoignez-nous