Getdibits/setdibits - demo simple!

Soyez le premier à donner votre avis sur cette source.

Vue 7 841 fois - Téléchargée 893 fois

Description

Salut à tous,

on peut dire que la source de Barbichette m' a bcp inspirée à essayer de tirer partie de ces 2 fonctions qui faut avouer, sont hyper rapides.
J' ai enfin réssuit au bout de quelques heures je l' avoue...
Sa démo étant très complexe, j' ai retiré l' essentiel de sa source pour en faire un condensé.
Certains commentaires sont de la source de Barbichette,
Merci à lui en tout cas.

Avec ça, on va pouvoir faire des économiseurs d' écrans ou des animations comme la pluie de code du film Matrix (non, moi j' ai pas le temps pour ceux que j' ai enthousiasmé).

Voilà,
A+

Conclusion :


Le code tiens presque sur une feuille A4, impossible de faire plus simple.
Je tiens à préciser que je vais prendre en compte les commentaires de Forman sur la source de Barbichette ds une prochaine mise à jour.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
460
Date d'inscription
dimanche 5 décembre 2004
Statut
Membre
Dernière intervention
6 avril 2009
2
Pour Barbichette, c'est ok pour moi, j'ai vu qu'il fallait mettre en place le fichier dans Windows pour avoir accès aux paramètres.

A ce sujet, si après un aperçu je décide d'annuler j'obtiens une exception et obligé de fermer le processus.

@+,

Cincap
Messages postés
460
Date d'inscription
dimanche 5 décembre 2004
Statut
Membre
Dernière intervention
6 avril 2009
2
Bonjour à toutes et à tous,

@ Cirec, avec Delphi 6 et tes modifications telles quelles, j'ai une erreur de compilation.

@ Barbichette, j'ai jeté un coup d'oeil à ton effet de flamme, c'est super et par hasard, y a t'il moyen de modifier la couleur (flamme).

@+,

Cincap
Messages postés
7
Date d'inscription
samedi 12 octobre 2002
Statut
Membre
Dernière intervention
25 août 2007

Bonjour à tous,
(j'espère que ce post 3 mois plus tard ne sera pas complètement perdu, :-) )
J'ai utilisé les modifs de cirec (post du 12/05 à 22:31) et ai gagné au concours des AV, grace à la ligne :
GetDIBits(BMP.Canvas.Handle, BMP.Handle, 0, BmpSrcHeight,
PImgArrayPix, ImgBitInfo, DIB_RGB_COLORS);
Je m'en suis sorti avec l'amie Esperluette, comme ça :
GetDIBits(BMP.Canvas.Handle, BMP.Handle, 0, BmpSrcHeight,
@PImgArrayPix, ImgBitInfo, DIB_RGB_COLORS);

Cependant, ça n'est pas pour autant que je récupère l'effet original au clic sur l'image : chez moi (D7 perso sous w2k), l'image devient toute noire et vire au rouge de clic en clic.
Doit y avoir un 'tit 'blème car je peux distinguer tout en haut de l'image une ligne de couleurs diverses et variées...
Et si j'utilise encore mon amie Esperluette :
SetDIBits(ImgResult.Canvas.Handle, ImgResult.Picture.Bitmap.Handle,
0, BmpSrcHeight, @PImgArrayPix, ImgBitInfo, DIB_RGB_COLORS);
alors là, il ne se passe rien aux clics... :-(

Protocole de manip : downloadé la source et joué un peu avec, puis copié/collé le code de cirec et c'est tout.
Hélas, mes compétences graphiques atteignent vite leurs limites sur ce coup-là.

Valà, c'étaient mes 2 cts,
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
42
@ Barbichette:
Pour l'exemple des flammes je veux bien c'est un cas particulier (l'image et la palette sont crées de toutes pieces) mais pour les autres exemples (les reflets et celle-ci) les images sont connues à l'avance et on peut donc utiliser directement un PByte ce qui rend le code plus simple et plus rapide.
Comme le but est quand même d'utiliser une procedure ultra-rapide il n'est peut être pas utile de la ralentir et/ou de la compliquer, enfin c'est mon avis ...

@ Forman:
En fait, je ne doute pas que ce genre de problème puisse survenir mais en lisant
ton message sur la source de Barbichette j'avais compris que le problème survenait automatiquement
avec des images de tailles supérieurs à 800*600 d'ou mon teste en 2304*1024.
Conclusion il vaut donc mieux utiliser tes deux méthodes
WinGetMem et WinFreeMem
pour un maximum de sécurité

@+
Cirec
Messages postés
600
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
6 avril 2010
1
@ Cirec:
tu dis que tu n'as pas eu de problèmes mais je t'assure que ça arrive. Ca dépend déjà de la taille des pages allouées par défaut par le système. De plus, si ton programme utilise peu de resources (en dehors de celles utilisées par le bitmap) le problème ne se produit pas car les GetMem (implicites ou non, liés à l'allocation des descendants de TObject par exemple) ne remplissent pas une page complète et le memory manager de base de Delphi commence par allouer au début d'une page, donc le problème n'est pas visible. Mais si tu fais de nombreuses allocations, le problème apparaîtra sûrement... je l'ai vérifié expérimentalement. Ca ne coûte de toute façon pas très cher de faire un WinGetMem avec ma fonction plutôt qu'un GetMem standard, et en terme de performance c'est de toute façon meilleur car le memory manager de Delphi est plutôt adapté à des allocations de taille réduite (exemple: la méthode implicite NewInstance de la classe TObject) en terme de vitesse, et dans le cas de larges zones de mémoires (typiquement des images donc), le memory manager de Windows est meilleur.
Afficher les 15 commentaires

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.