VIDEOCREATOR : ANIMATION D'IMAGES

florenth - 25 août 2006 à 14:21
Francky23012301 Messages postés 400 Date d'inscription samedi 6 août 2005 Statut Membre Dernière intervention 11 février 2016 - 21 sept. 2006 à 19:55
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/39259-videocreator-animation-d-images

Francky23012301 Messages postés 400 Date d'inscription samedi 6 août 2005 Statut Membre Dernière intervention 11 février 2016 1
21 sept. 2006 à 19:55
Argg Monsieur Débiars tu as des yeux de Linx :


"Mais pourquoi diable suis-je obligé de recharger le film pour le voir une deuxième fois ?" : Car Francky est un gros feignant lol. En fait le coté TMediaPlayer me gonflait à coder donc j'ai fais le stricte minimum lol. Allez je reverais ca ce week end pour toi : t'es gaté en ce moment ;).
Debiars Messages postés 285 Date d'inscription lundi 16 juin 2003 Statut Membre Dernière intervention 11 février 2018
21 sept. 2006 à 15:27
Faut rayer "rayé" et remplacer par raté (c'en est un autre).
Debiars Messages postés 285 Date d'inscription lundi 16 juin 2003 Statut Membre Dernière intervention 11 février 2018
21 sept. 2006 à 11:41
Heureux, merci...

Mais pourquoi diable suis-je obligé de recharger le film pour le voir une deuxième fois ?

Les boutons de repositionnement n'ont aucun effet.

Ou alors, j'ai encore rayé un truc :-$
Francky23012301 Messages postés 400 Date d'inscription samedi 6 août 2005 Statut Membre Dernière intervention 11 février 2016 1
20 sept. 2006 à 13:59
Salut Mister,

Un expert comme toi : tu veux me faire avaler des salades lol ^^.

En fait j'avais réalisé une animation flash en guise de tuto : mais vu la taille du fichier j'ai été obligé de renoncer à le joindre avec le source : c'est balo.

Promis spécialement pour toi je rajoute un fichier texte en guise de mode d'emploi ce soir : Content ? ;).

@+
Debiars Messages postés 285 Date d'inscription lundi 16 juin 2003 Statut Membre Dernière intervention 11 février 2018
19 sept. 2006 à 14:08
Salut Franky,

Serait-y possible d'avoir un p'tit mode d'emploi, siouplait ?
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
30 août 2006 à 22:20
@franky : erf ... désolé, le fait de poster sans tester ... mais si il y a autant d'entrée je pense que les chaines ne sont pas adaptée d'un point de vue lecture ecriture.

il faudrait donc plus que tu te tourne vers une solution avec des structures :

record
Offset : cardinal;
Size : cardinal;
end;


@florenth : mmm je vais jetter un oeuil a ton ExtStream, car je suis sur un packer en ce moment et ça pourrait etre interressant.
Francky23012301 Messages postés 400 Date d'inscription samedi 6 août 2005 Statut Membre Dernière intervention 11 février 2016 1
30 août 2006 à 17:45
Si si Florenth j'ai oublié des mots lol :

"Ta méthode addInfo ne fonctionne pas on perd 40% du fichier, ce qui est normal tu utilises un TStringList. Ta fonction est correcte si tu as un fichier de petite taille mais dès que ca devient ce n'est plus bon.".

Bien moi aussi Florenth je pensais pour le fmCreate mais à priori les deux procedures ne sont pas totalement identiques : j'ai éssayé en changeant juste cela et ca a planté lamentablement lors de la lecture.
En ouvrant un fichier avec fmCreate, il est automatiquement crée s'il n'existe pas et il est ouvert en écriture donc ...

@Francky: tu n'aurais pas oublié quelques mots dans ta première phrase ?
Francky23012301 Messages postés 400 Date d'inscription samedi 6 août 2005 Statut Membre Dernière intervention 11 février 2016 1
30 août 2006 à 16:20
@foxi :

*Ta méthode addInfo ne fonctionne on perd 40% du fichier, ce qui est normal tu utilises un TString. Ta fonction est correcte si tu as un fichier de petite taille mais dès que ca devient ce n'est plus bon.

*Dans la function addFile : le fait d'utiliser ceci
DestFS := TFileStream.Create(ADestFile, fmOpenWrite or fmCreate) provoque une erreur de stream lors de la lecture. Il en resulte que malgré les apparences

DestFS := TFileStream.Create(ADestFile, fmOpenWrite or fmCreate) n'est pas équivalent à If FileExists(ADestFile) then DestFS1:=TFileStream.Create(ADestFile,fmOpenWrite)
Else DestFS1:=TFileStream.Create(ADestFile,fmCreate);
Non, les record, c'est très pratique pour écrire tout d'un coup.
Mais il ne faut pas qu'il y ait de chaines longues (string) dedans, sinon ça ne marche pas.

Je pense que mon unité ExStream pourrait pas mal servir à d'autres, je penserais peut être à la poster.
Francky23012301 Messages postés 400 Date d'inscription samedi 6 août 2005 Statut Membre Dernière intervention 11 février 2016 1
30 août 2006 à 05:35
Arfff,

Scandaleux de ma part le format : oublie de ma part dans cette partie ^^.

Les images : Oui effectivement et quitte à faire mieux (merci Florenth) autant verifier la taille des images (1800*1600 suffit) et utiliser un taux de compression à 20%. Merci le gain de taille ^^ de quoi faire un Codec.

Pour le TStringList : sniaf sniaf je voulais faire autre chose mais j'avais pas d'idées. Je vais voir ca aussi car ca pourra me suffir si je fais un composant.

Pour les Record : j'aime pas ca lol

Merci f0xi : encore des améliorations à faire mais je trouve que ce source à quand meme de la gueule lol. Je tiens le bon bout
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
30 août 2006 à 03:46
petite amelioration des fonctions de convertions d'images :


il faut donner un nom explicite pour savoir de quoi il s'agit réellement, BMPConversion ne veut rien dire...

Procedure BMPToJPEG(const SourceFile,DestFile : string; const CQu : TJPEGQualityRange = 100);
var
AJPEG : TJPEGImage;
ABitmap : TBitmap;
begin
// verifier l'existance de la source peu eviter des problemes
if not FileExists(SourceFile) then exit;

AJPEG := TJPEGImage.Create;
ABitmap := TBitmap.Create;
try
ABitmap.LoadFromFile(SourceFile);
AJPEG.GrayScale := False;
AJPEG.Assign(ABitmap);
AJPEG.JPEGNeeded;
AJPEG.CompressionQuality := CQu;
AJPEG.Compress;
AJPEG.SaveToFile(DestFile);
finally
AJPEG.Free;
ABitMap.Free;
end;
End;


dans addfile :

Function AddFile(ASourceFile,ADestFile : String) : cardinal;
Var
SourceFS,DestFS : TFileStream;
Begin
SourceFS := TFileStream.Create(ASourceFile, fmOpenRead);
Result := SourceFS.Size;

// tout simplement >>
DestFS := TFileStream.Create(ADestFile, fmOpenWrite or fmCreate);
Try
DestFS.Position := DestFS.Size;
DestFS.CopyFrom(SourceFS, Result);
Finally
FreeAndNil(DestFS);
FreeAndNil(SourceFS);
End;
End;


dans addinfo, vus que ce sont des chaines, pourquoi ne pas utiliser un TStringList ?
cela te permettrais d'ecrire une routine moins complexe, surtout que les chaines sont relativement chiantes a manipuler dans les streams, de plus cela te permet de ne pas a avoir a utiliser de delimiteur en fin de chaine et egalement te pouvoir transmettre directement des données de composants possedant un TStrings :

procedure AddInfo(const Infos, FileName : Sting);
var
TL : TStringList;
begin
TL := TStringList.Create;
TL.LoadFromFile(FileName);
TL.Insert(0,Infos);
TL.SaveToFile(FileName);
TL.Free;
end;


attention egalement au repetition de inttostr dans les chaine, c'est trés lents a partir de 2 appels :

Info := IntToStr(ImgSize)+'-'+IntToStr(SndSize)+'-'+IntToStr(IniSize)+'|';

Info := Format('%d-%d-%d|',[ImgSize,SndSize,IniSize]);

tu pourrais meme utiliser une structure record pour simplifier l'ecriture du fichier infos, voir meme pour generer un footer de fichier pour fusionner le pack fichier et le fichier d'infos.

TInfos = record
ImgSize,
SndSize,
IniSize : cardinal;
end;

ont pourrais ecrire donc une telle structure de fichier :

[<SIGN> signature - 4 octets - cardinal]
[<COUNT> nombres de fichiers - 4 octets - cardinal]
[<FILES> fichiers - n*octets - bytes buffer]
[<SGCTL> control signature pour le debuts des infos - 4 octets - cardinal]
[ infos - FCOUNT*3*4 octets - TInfos structure]

et en gros on ferais comme cela :

ajout de fichier / infos :

ouverture du Flux en mode RW (fmOpenReadWrite or fmCreate)
Lecture/verification de SIGN
Lecture de COUNT
Deplacement a l'offset SIZE-(COUNT*SizeOf(TInfos));
Lecture de INFOS dans une Array of TInfos (d'ailleur je suggere la recuperation de l'offset de depart du fichier dans le stream dans la structure);
Ajout des infos des prochains fichiers dans la table d'infos
Incrementation de COUNT +1
Ecriture des fichiers dans le Flux
Ecriture de la tables des infos dans le Flux
Deplacement a offset 4
Ecriture de COUNT
Fermeture du flux

et derriere ça, utilisation de la ZLibEx pour compresser le tout :)
Francky23012301 Messages postés 400 Date d'inscription samedi 6 août 2005 Statut Membre Dernière intervention 11 février 2016 1
29 août 2006 à 00:18
Une petite précision : pour compiler le source, les deux dll doivent se trouver dans le meme repertoire que le projet
Pour la crération en avi : avec les composants DSPack, un petit tour dans GraphEdit (nécéssite le DirectX SDK), tu crée le graph de conversion (avec encodage que tu veux - xvid, mp3 c'est bien), tu le sauve, tu le recharge depuis Delphi (pour lier les filtres), et ensuite, il te suffit de donner le contenu dans les deux filtres de début ezt tu obtiens le flux de sortie en .avi comprésse XviD ! Magique, pas trop dur mais pas spécialement simple ^^

Pour le changement : pourquoi ne pas créer un dossier qui contiendrait les images à défiler retouchées. Ou alors tu les inclus directement dans le fvc.
Francky23012301 Messages postés 400 Date d'inscription samedi 6 août 2005 Statut Membre Dernière intervention 11 février 2016 1
26 août 2006 à 20:20
Salut

@DrJerome : Merci pour tes commentaires ;)
A quand l'avi ? ben si je devais le faire je ferais plutot un format compressé en créant un propre composant maiss là c'est un boulot énrome qui doit surement tres difficile.

@A Florenth ; j'ai fais quelques changements pour les autres je dois reflechir encore un peu sur la méthode à utiliser ^^.
Modification de l'image : lol, je vous l'avais caché. C'est embettant oui je suis d'accord avec toi alors pourquoi ? Pour ne pas rendre l'application trop difficile à prendre un main. Mais je dois reflechir (decidemment) pour trouver une solution convenable.


Merci à vous deux
C'est vrai qu'un enregistrment en avi seraitr intéréssant.
Mais méler son et image semble délicat et puis, faut trouver un composant pratique (pas question d'utiliser l'API bas niveau - c'est trop le bazar)

Juste un détail: si on retouche une image, tu modifies le fichier concerné. C'est génant tu ne toruve pas ? (en plus, la taille est réduite)
DRJEROME Messages postés 436 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 5 février 2015
26 août 2006 à 14:28
Lut ;)

On voit d'entrée qu'il y a eu du boulot

bientôt l'avi ?

félicitations ;)
Francky23012301 Messages postés 400 Date d'inscription samedi 6 août 2005 Statut Membre Dernière intervention 11 février 2016 1
25 août 2006 à 16:35
Merci FLorenth,

Je fais les modifs rapidement et je poste le tout ;).
Pour le texte, c'est moi qui suis nul ! Comme il restait noir sur fond noir, ben on le voyait pas ! Mais sinon ça marche.
Le bug vient si on essaye de changer la couleur (ex: on met rose mais on veut du bleu)

Je n'ai pas pu teste le son car je n'ai ni micro, ni fichier .wav c'est tout. Donc je ne peux pas te dire si ça marche ou pas.

Pour le SaveDialog, ça n'alourdit pas trop l'appli et ça t'évite de changer les filtres.
Pour le problème d'extension, il suffit de mettre DefaultExt := 'fvc'

Pour la clé de registre c'est OK mais rien ne se produit quand on dbl clique sur le fichier fvc. Je pense que sous WinXP Perso c'est différent (y'a HKEY_CLASSES_ROOT aussi) sur ce site, j'avais trouvé une source qui le fait bien
Francky23012301 Messages postés 400 Date d'inscription samedi 6 août 2005 Statut Membre Dernière intervention 11 février 2016 1
25 août 2006 à 15:53
Merci Florenth,

Pour le Filter et le trackbar je vais changer cela.

Pour le texte c'est surprenant je viens de télécharger la source et j'ai bien un changement de couleur avec un bmp ou un jpeg avec la souris ou le clavier (OnClick et OnChange du TreeView). PS : si on ne sélectionne pas de couleur dans le ColorGrid par défaut la couleur est noire.Peux-tu me dire ce qu'il y a marqué en paramètre pour "couleur" dans le treeview.

Changement d'icone dans le treeview: je viens de le voir, je penses savoir ce que c'est ^^.

Pour la sauvegarde pourquoi utiliser un TOpenDialog et pas un TSaveDialog?Bien j'avais pas envie d'allourdir l'exe par un composant inutile (le TSaveOpenDialog n'était pas spécialement utilie).

L'extension fvc : il y a deja eu ce probleme de soulever avec D6 il me semble. Peux tu me dire ta congif windows et la version de Delphi que tu as utilisé?

Windows XP Professionnel , Delphi7. Peux tu regarder via regedit si la clée est crée dans la base de registre ?

L'affichage du son et du texte dans le player : chez moi ca fonctionne. Bizarre ?

Si d'autres personnes peuvent tester pour savoir si cela fonctionne chez eux ?
Je suis bien heureux de voir ce code réapparaitre.

Alors, je te donne mon avis :
- Ah, quel changement d'interface (skin), c'est encore mieux qu'avant !

Ensuite, ce sont plutot des suggestions, conseils, ... :
- Dans le TOpenDialog, tu permets d'ouvrir bitmpas et jpeg. Ce serait mieux si le filtre serait 'Fichier images|*.bmp;*.jpg;*.jpeg' ce qui éviterait de changer la combobox.
- Il y a quelques problèmes d'affichage avec le TreeView : les icones changent bizarrement des fois ou alors la barre de défilement clignote (non cirec, c'est pas un problème de doublebuffer ^^). De plus, seul le nom de fichier devrait être affiché, avec les répertoires c'est un peu trop long
- Je pense qu'afficher les images sans modifier le rapport hauteur/largeur serait un plus.
- Peu importe la couleur de texte que je choisis, le texte redeviens noir quand je resselectionne l'image dans le treeview.
- Pourquoi utilises-tu un TOpenDialog pour la sauvegarde ? Et chez moi, l'extension par défaut du fichier n'est pas fvc (du coup, le player ne le reconnais pas)
- Une fois le fichier crée (je n'ai pas pu tester le son), le player lit les fichiers à toute allure. En fait, je n'avais pas compris que le trackbar servait pour régler la vitesse (honte à moi lol)
- Le texte que j'ai rentré n'aparait pas avec l'image. Je n'ai pas cherché à savoir d'où ça vient ni à faire d'autres essais. Si j'ai le temps, je m'y attelerai

En tout cas, le projet est conséquant et mérite sa place ici.
Pas de note pour le moment ... aaahh ... je laisse planer le doute !

Bon travail en tout cas ! Et à la prochaine !
Rejoignez-nous