Transposition d'images à partir d'une équation

Soyez le premier à donner votre avis sur cette source.

Vue 4 740 fois - Téléchargée 558 fois

Description

Cette fonction permet d'effectuer une transposition d'image a partir d'une équation.
Cela peut-etre utile pour une page "A propos" dans un programme, ou alors comme page d'ouverture.
En infulant sur le modulo, vous reglez sur la finesse et la vitesse de la transposition.

Conclusion :


Par contre n'ai pas réussi a effectuer une transposition a partir d'une fichier.
Ce que je veux dire par la c'est que l'image doit être sur la form et au format bitmap pour que cela fonctionne, et il faut aussi que la taille de l'image soit identique a la taille que vous voulez.... Enfin si vous avez une solution ces quelques petit problème, c'est sans problème.

Salutations et bonne programmation.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Assez sympa comme truc.
Les effets sont au rendez-vous.

Par contre j'ai quelques petites remarques:
- Comme il s'agit d'une animation, tu changes beaucoup les pixels de ton image, cela fait naître un scintillement. Pour l'enlever, rajoute simplement DoubleBuffered := True dans le OnCreate de ta fiche.

- L'acces aux pixels de ton bitmap est très long car la propriété Pixels[] du TCanvas fait appel à l'API GetPixel et SetPixel tout en vérifiant les limites de débordement (d'ailleurs dans ton cas, heureusement qu'il y en a des vérifications car tu a fait une "grosse" bétise", voir plus loin).

=> Solution, utiliser la propriété ScanLine[] du TBitmap qui retourne un pointeur DIRECT vers les pixels dans la mémoire (plus besion d'API et donc jusqu'a 30 fois plus rapide).
Utilise la méthode avec Pixelformat := pf24Bit;
Voila un bon lien : http://nono40.developpez.com/tutoriel/delphi/efg/scanline/

- Comme pour tout tableau dynamique les pixels d'un bitmap vont, dnas le sens vertical, de Y := 0 jusqu'a Y := Height -1 et, dans le sens horisontal, de X := 0 à X := Width -1.

Tu l'as donc vu, les pixels s'arretent à Width-1 et Height-1. C'est un sacré gros piège à éviter pour ne pas se prendre une violation d'accès (parce qu'avec ScanLine[], plus de vérifications externes, c'est à toi de les faire, mais pas de quoi s'arracher les cheveux).

(En fait, le piège, c'est que pour les string ça va de 1 à Length(String) et que pour les tableaux, ça va de 0 à Length(Tableau)-1. )

- Pour le problème du bitmap qui doit être dans la fiche, c'est simple: il suffit de placer un bouton, un TOpenPictureDialog (onglet Dialogues) et dans l'évenement OnClick du bouton mettre:

begin
OpenPictureDialog.Filter := 'Fichiers bitmap|*.bmp';
if OpenPictureDialog.Execute then
Image_originale.Picture.Bitmap.LoadFromFile(OpenPictureDialog.FileName);
end;

- Si tu as n'importe quelle question à propos de ce que je t'ai dit, poste à la suite.
Ou si c'est vraiment une question à part entière, poses-là sur le forum.

@ ++ sur DelphiFR
Florent.

PS: je mettrai bien 08/10 mais le système de note ne fonctionne pas.
Messages postés
8
Date d'inscription
jeudi 6 juin 2002
Statut
Membre
Dernière intervention
8 août 2005

Par contre comme je suis encore débutant, toutes remarques sur le code, la façon de faire, les commentaires, la syntaxe, etc.... sont les bienvenue!

Merci d'avance

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.