japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 12 juil. 2007 à 01:10
"est t'il possible de le controler avec un TprogressBar afin de contrôler la conversion"
Ben heureusement que oui...
(sinon ça servirait à quoi, une ProgressBar ?)
Tu as au départ un nombre N de fichiers à traiter.
Tu as donc une progression P = 0, 1, 2... jusqu'à N fichiers.Dès qu'un fichier est traité, tu incrémentes P :P + 1, jusqu'à ce que P N.
Il ne te reste plus qu'à convertir ça en pourcentage d'avancement de la TProgressBar :
WhiteHippo
Messages postés1154Date d'inscriptionsamedi 14 août 2004StatutMembreDernière intervention 5 avril 20123 10 juil. 2007 à 20:08
xnView, non ... plutot GFL SDK si on veut rester en rapport avec Delphi Au quel cas, il faudra utiliser gflResize. N.B. Mais il faudra toujours parcourir l'arborescence des fichiers.
Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
cincap
Messages postés460Date d'inscriptiondimanche 5 décembre 2004StatutMembreDernière intervention 6 avril 20092 10 juil. 2007 à 20:23
Bonsoir,
@ Foxi, j'utilisais le logiciel free "Photo resize magic", mais c'était plus enrichissant de pouvoir le faire en Delphi puisque c'est une passion depuis ma prépension.
@ WhiteHippo, j'avais vu la source de Delphiprog, mais le commentaire de Pirlouis m'avait rendu perplexe puisque j'utilise comme appareil numérique le H9 de Sony qui permet la haute définition (1080) avec un 8 millions de pixels, les photos réduites doivent être de bonne qualité.
WhiteHippo
Messages postés1154Date d'inscriptionsamedi 14 août 2004StatutMembreDernière intervention 5 avril 20123 10 juil. 2007 à 23:01
Cincap,
Pour ne pas perdre en qualité, il suffit de fixer la qualité de compression avant de sauvegarder le fichier, rien de plus :
JpegTemp.CompressionQuality:=100; // 100 = meilleure qualité, 50 = moyenne, 1 = nulle ;D
JPegTemp.SaveToFile(FileName);
Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
florenth
Messages postés1023Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention17 août 20083 11 juil. 2007 à 12:07
Salut !
Attention, pour ne pas perdre en qualité, il faut non seulement mettre 100 à la propriété CompressionQuality du TJpegImage mais aussi veiller à ce que l'algorithme de redimentionnement soit optimal, ce qui n'est pas du tout le cas de StretchDraw().
Pour avoir une meilleure qualité, mieux vaut utiliser l'API StretchBlt() en Halftone. (Google sur ces deux termes pour plus d'infos).
Si tu veux une qualité impeccable, (au détriment de la vitesse de redimentionnement ^^) alors la librairie GraphicEx est faite pour toi: elle propose une procédure de redimentionnement d'images avec différents algorithmes, comme celui de Lanczos ou de Spline, qui donnent de meilleurs résultats.
De plus, cette librairie ne requiert aucune installation pour être utilisée, juste un "GraphicEx" dans les uses.
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 11 juil. 2007 à 14:21
Salut,
"l'utilisation de cette application ne servira qu'à traiter un lot d'images dans un même dossier"
Oui mais enfin, si c'est réalisé correctement, ça met en ouvre pas mal de techniques de programmation intéressantes, en particulier pour un débutant.
Et qui peuvent être réutilisées, en particulier le parcours de répertoires avec TSearchRec et compagnie.
Concernant le redimensionnement d'images, voir également une source de Mauricio :
CREATEUR DE VIGNETTES EN HAUTE QUALITÉ
qui comporte hélas un léger bug visuel dû à une erreur dans les calculs. On attend la mise à jour avec patience.
Il est à signaler que l'utilisation de l'API StretchBlt() en Halftone citée par Florent, qui a un excellent rendu, est inopérante sous Win9x...
D'accord (encore une fois) avec Florenth pour StretchDraw() qui est très rapide mais ne peut convenir que pour une affichage avant traitement dans une série de vignettes par exemple...
florenth
Messages postés1023Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention17 août 20083 11 juil. 2007 à 17:13
@ japee: sans vouloir troller, Win9x, c'est vraiment pas le top... y'a Me, Xp et maintenant Vista (quoique je ne le recommande pas trop) alors plus d'excuses !
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 11 juil. 2007 à 17:44
@Florenth
- J'ai gardé l'habitude de vérifier mes codes sous 98SE mais je ne l'utilise plus.
- Me = 9x replâtré
- XP me va très bien, et pour l'instant rien de m'oblige à m'intéresser à Vista
- Pourvu que ça dure...
cincap
Messages postés460Date d'inscriptiondimanche 5 décembre 2004StatutMembreDernière intervention 6 avril 20092 11 juil. 2007 à 18:35
Bonsoir à toutes et à tous,
Avec le Tlistview, est t'il possible de le controler avec un TprogressBar afin de contrôler la conversion quelle que soit le nombre de photos.
J'ai essayé de l'implenter à cet endroit mais cela ne fonctionne pas.
Pb1 = TprogressBar
if DestOk
then begin
// Parcourir tous les fichiers dans EPathSource.Text : Cont : FindFirst(ValiderPath(EPathSource.Text + '\*.*'), faAnyFile, SRec) 0;
while Cont do
begin
if TraiterFichier
then CONSTRUIRE_MINIATURE(SRec.Name, TypeFichier);
Cont :FindNext(SRec) 0;
Pb1.Position := 0;
Pb1.Max := LVStatus.SelCount;
end;
end
else
florenth
Messages postés1023Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention17 août 20083 12 juil. 2007 à 12:27
Même pas besoin de convertir en pourcentage: tu règles la propriété Min de la ProgressBar à 0 et la propriété Max au nombre de fichiers et tu incrémente la propriété Position (soir directement, soit par Stepxxx)
Cela peut donner un code du genre (SL: TStringList qui contient les fichiers - PB: TProgressBar - LblInfo: TLabel)
<hr size= "2" width="100%" /> procedure TFrmPrinc.Redimentionnement;
var I: Integer;
begin PB.Min : = 0;
PB.Max := SL.Count - 1;
for I : = 0 to SL.Count - 1 do begin { Mise à jour le la progressbar et du label }
PB.Position := I;
LblInfo.Caption := Format('Traitement du fichier %d sur %d: %s', [I + 1, SL.Count, ExtractFileName(SL[I])]);
{ Force la mise à jour de l'affichage }
Application.ProcessMessages;
{ Redimentionnement de l'image }
// à toi d'écrire le code pour redimentionner l'image SL[I] en fonction de la méthode de redimentionnement voulue bien sûr...
end ;
{ A la fin, on réinitialise tout }
PB.Position : = 0;
LblInfo.Caption := 'Terminé !';
end ;
<hr size ="2" width="100%" />
Voila ! Si tu as d'autres questions... n'hésites pas.