Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

BAC À SABLE


Information sur la source

Catégorie :Graphique Classé sous : sable, scanline, effet, bitmap Niveau : Débutant Date de création : 14/03/2008 Date de mise à jour : 16/03/2008 23:12:44 Vu / téléchargé: 3 084 / 260

Note :
9 / 10 - par 1 personne
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Bon, je vais essayer de me rattraper après mon dernier post....
Retour aux sources (sans jeux de mots) et retour à la maternelle

Ce n'est qu'un effet de tas de sable qui tombe.
L'algo n'est pas de moi, mais pas moyen de retrouver sur internet l'auteur original...
C'était un programme Java que j'ai traduit en Pascal.

Si quelqu'un se reconnais ou retrouve l'auteur, qu'il me le dise pour que je le site.

Juste pour info, lorsque l'on clic sur l'image, on l'a retourne.
Pour une image plus perso, le fond doit être blanc et les zones fixes en noir.

PS : Merci à mon chien pour m'avoir donné l'autorisation d'utiliser sa tête pour seulement 2 biscuits de salaire...

 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

14 mars 2008 22:46:51 :
rajout de commentaires et petite modif de l'algo
16 mars 2008 23:12:45 :
possibilité d'ouvrir une autre image, correction de la non symétrie de l'effet

Commentaires et avis

signaler à un administrateur
Commentaire de Caribensila le 14/03/2008 21:49:19

Bien que ça me rappelle les travaux de Pierre-Gilles de Gennes sur la "matière molle", là ça m'étonnerait que Cirec trouve ton tas de sable pas assez consistant.  lol

Il est génial cet effet! Et en si peu de code, beau travail de traduction!
J'vais me plonger la-dedans dès que j'ai le temps (ça me fera des vacances à la plage).

PS : Pour quand le joli vrai sablier pour nous faire patienter pendant les processus bloquants?  ;)

signaler à un administrateur
Commentaire de Caribensila le 14/03/2008 21:54:54

... Un bémol quand même:
    2 biscuits pour ça, c'est de l'exploitation!

signaler à un administrateur
Commentaire de cantador le 14/03/2008 22:53:08

bravo barbichette et
un nonos pour le chien..

signaler à un administrateur
Commentaire de cirec le 14/03/2008 23:18:30 administrateur CS

"là ça m'étonnerait que Cirec trouve ton tas de sable pas assez consistant.  lol "

il me semble qu'un tas de sable n'est pas consistant ... non ? lol

Sinon bien vu ... voici un code qui reflète bien ce à quoi tu nous avais habitué.

Félicitations au chien (belle bête) ^^
et Bravo au maitre ;-)

signaler à un administrateur
Commentaire de OlivierH le 15/03/2008 15:41:09

C'est vraiment super d'avoir un assistant canin à la hauteur.. Bravo.

signaler à un administrateur
Commentaire de Francky23012301 le 15/03/2008 17:23:07

Pauvre chien, tu l'as décapité : C'est Delphiprog qui va pas etre content lui non plus lol.

J'applaudis l'idée qui est original et qui juxtapose différents effets.

Juste une remarque : Dans le OnCreate rajoute DoubleBuffered:=True; ca évitera le scintillement ;).

signaler à un administrateur
Commentaire de jihelb le 16/03/2008 20:29:38 9/10

Bravo Barbichette, j'aime beaucoup la façon de résoudre ce problème, et je pense que celà vaut bien un 9 (étonné que personne n'ai noté !?)
Je me suis par contre demandé pourquoi il y avait une dissymétrie entre l'écoulemnt vers la droite(trés réaliste) et celui vers la gauche(qui fait apparaitre des murs verticaux) alors que l'algo de gestion d'une ligne est parfaitement symétrique.
Celà provient du fait qu'une ligne est balayée de la gauche vers la droite.
J'ai donc légèrement modifié ceci pour que les lignes paires soit balayées dans un sens et les impaires dans l'autre (peut-être y-a-t'il une autre solution, mais je ne l'ai pas trouvée).
Donne-nous encore des animations.
////////////////////
PROCEDURE INITIALE

procedure TForm1.DoSand;
var
x,y:integer;
a,b,c,d,e:integer;
bg:integer;
p:PQuadArray;
begin
bg:=$FFFFFF; //couleur du fond
p:=bitmap.scanline[h-1];
// on balaye de bas en haut l'image,
// sinon, des grains de sable pourraient tomber d'un coup du haut en bas...
for y:=0 to h-2 do
begin
   //-+-+-+ début partie à déplacer -+-+-+-
                    .
                    .
                    .
   //-+-+-+ fin   partie à déplacer -+-+-+-
end;
end;

REMPLACEE PAR

procedure TForm1.DoSand;
var
x,y:integer;
a,b,c,d,e:integer;
bg:integer;
p:PQuadArray;
//---------
   procedure UneLigne(x: integer);
   begin
     //-+-+-+ début partie déplacée -+-+-+-
                      .
                      .
                      .
     //-+-+-+ fin   partie déplacée -+-+-+-
   end;
//---------
begin
bg:=$FFFFFF; //couleur du fond
p:=bitmap.scanline[h-1];
// on balaye de bas en haut l'image,
// sinon, des grains de sable pourraient tomber d'un coup du haut en bas...
for y:=0 to h-2 do
begin
  //-+-+-+ début partie modifiée -+-+-
   if odd(y)
   then for x:= 1 to w-2 do UneLigne(x)
   else for x:= w-2 downto 1 do UneLigne(x);
  //-+-+-+ fin   partie modifiée -+-+-
end;
end;

signaler à un administrateur
Commentaire de barbichette le 16/03/2008 23:20:15

Salut jihelb,
Tu as bien vu pour le souci de symétrie.
J'ai d'abord copier ton code, qui marche très bien, puis je me suis aperçu qu'en évitent une sous procédure et surtout, en ne changeant le sens de traitement qu'une fois par image, l'effet était le même mais bien plus rapide (sur mon ordi en tous cas).
J'ai donc une variable globale (dx) qui donne le sens de traitement, et dans la procédure DoSand, suivant dx, on part de la gauche, ou de la droite et on avance ou on recule.
Pas de test, que des additions ;-)...

Sinon, j'ai ajouter quelques lignes pour charger une autre image BMP.
Avec dans le zip une image en forme de sablier pour faire plaisir à Caribensila. Je n'ai par contre pas mesuré sa durée. il me semble presque parfait pour faire cuire un ½uf à la coque....

signaler à un administrateur
Commentaire de MAURICIO le 17/03/2008 16:01:09

Salut,
ça manque cruellement de commentaires afin d' expliquer la méthode utilisée?!

Sinon bem, 2 biscuits pour le toutou c' est pas beaucoup, surtout que c' est un Labrador (ils sont plutôt gourments, j' en ai un aussi).

signaler à un administrateur
Commentaire de barbichette le 17/03/2008 18:26:31

Pour l'explication : il me semblais que les commentaires suffisaient...
Enfin... je vais essayer de décrire le processus. Comme il est pas de moi à la base, c'est pas évident...

En gros, on prend une petite partie de 2x2 pixels.
En fonction de la présence ou non de grains de sables (un pixel), on les déplace en conséquence.
Comme ceci :
X.
..   X tombe (le pixel en dessous)

XY
.. les 2 X tombent (les deux pixels en dessous)

X. 2 possibilités : X tombe à droite de Y
Y. ou alors Y est poussé vers la droite et X tombe à la place de Y

Donc ça donne
..     ..
XY     YX

XY deux choix : Y tombe simplement
Z. ou Z est poussé sous Y et X tombe à la place de Z

Donc ça donne
X.     .Y
ZY     XZ

Il y a d'autres configurations possibles et il y a les cas où un des deux pixels du bas est noir donc fixe.
Dans les commentaires, les cas sont expliqués avant chaque "Case .. of"

J'espère que c'est devenu limpide...

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Progressbar [ par cincap ] Bonjour,Quand on a une fonction pour créer un effet sur un bitmap par ex: effet sépia.En utilisant le composant TProgressBar, qu'est ce qui définit le Impression d'un bitmap : Page Blanche [ par Francky23012301 ] Salut à tous,Je travaille actuellement avec le composant TGraphXY de Kénavo. J'ai besoin de pouvoir l'imprimer en noir et blanc, j'utilise donc ce cod Image en transparence [ par sisi231 ] Voilà mon problème :J'ai d'une part ma fiche avec un fond fait par une mosaïque d'une image (facile à programmer), et d'autre part un bitmap en mémoir Bug dans TOpenDialog : ofNoDereferenceLinks sans effet. [ par fadiese ] Bonjour à tous,Mon besoin est de récupérer au moyen d'un TOpenDialog (filtré sur *.lnk), le fichier visé par le raccourci afin de l'utiliser via un Sh Transfert de Bitmap [ par kinay ] J'ai un tableau de Bitmap contenant chacun des 'fichiers BMP',TTableau = array [1..10] of TBitmapMonTab : TTaBleauLes bitmap sont ensuite chargé par u Gestion d'événement [ par Oniria ] Bonjour,j'aimerais savoir comment déclarer une procedure d'événement. En effet, j'ai une unité en pascal permettant de gérer le port série. C'est un o Appliquer un cadre de couleur ou avec un bitmap [ par cincap ] Bonjour à toutes et à tous,Voici mon problème du jour, après avoir redimensionné une image et avant de la sauver en jpeg, est t'il possible de lui app ScrollBox vers Timage [ par stanilou ] Bonjour,J'ai un ScrollBox dans ma form et je voudrais le mettre en image (bmp, ou Timage) mais je n'y arrive point.J'ai essayé: ScrollBox1.Brush.Bitma effet Glow avec Delphi [ par jeffray03 ] Salut tout le monde, j´ai un gros souci, j´aimerais avoir un effet glow(contour d´un objet avec une couleur degradée changeable quittant du contour de detection de concordance d'une image dans un bandeau [ par mastermind89 ] Voila j'ai un une question , j'ai un bitmap en PixelFormat := pf1bit ,contenant par exemple : http://babivelle.free.fr/Bandeau.jpg et je désire


Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,359 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.