GESTION DES BITMAPS 32 BITS

Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 - 18 avril 2009 à 18:15
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 - 18 avril 2009 à 21:02
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/49864-gestion-des-bitmaps-32-bits

Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
18 avril 2009 à 21:02
Arf zut alors, j'ai inversé.
Pour ce qui est de SetPixelArray pour le DrawTo, je comptais l'enlever, mais j'ai dû oublier.

Pas de regrets.

Cordialement, Bacterius !
Utilisateur anonyme
18 avril 2009 à 20:55
PS: tu dis que 0 est Opaque et 255 Transparent !!!!

non non non
quand tu convertis un PNG en BMP32 avec TheGimp (toujours par Ex.^^) les pixels transparent sont à 0 "Zéro" et les Opaques à 255 !!!!
Utilisateur anonyme
18 avril 2009 à 20:52
ben chez moi sur mon PC avec mon code quand je slide j'ai un effet de fondu comme un film en 24 img/sec ... tout est fluide.
Avec le tiens le résultat est saccadé et je ne vois pas toutes les images intermédiaires.

déjà le fait d'utiliser un tableau de tableau de PRGBQUAD
ralentit énormément le traitement et en plus c'est totalement inutile ... un seul appel Scanline suffit ... on utilise directement le pointeur qui est retourné ... regarde la fonction "Bmp24To32" dans mon code
et chez moi je ne fait pas appel à Scanline pour la transparence je le fais qu'une seule fois pour préparer les bits pour la fonction AlphaBlend ... une fois que c'est fait il n'y a plus d'appel à Scanline et plus de calcule ...
et, je terminerai par ça, chaque appel à "DrawTo" fait appel à "SetPixelArray" ... donc tu doubles le temps de traitement voir triple puisque tu refais un appel à Scanline juste après et un calcule sur pixel !!!

... je supprime alors ... pas de regrets ?
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
18 avril 2009 à 20:51
Oui c'est normal, car là j'ai appliqué le filtre alpha : qui calcule la valeur alpha à partir de la couleur du pixel : ici, le pixel est presque blanc, alors la valeur alpha tend vers 0 (opacité, donc ça reste blanc).

Cordialement, Bacterius !
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
18 avril 2009 à 20:40
Sur le screenshot, la couleur blanc de bloc note n'est pas translucide, normal ? je pense que non.
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
18 avril 2009 à 20:26
Hmmm ok pour les 6 premiers paragraphes, ainsi que le 8eme. Mais le 7eme ... je ne comprends pas : moi aussi j'utilise scanline, et je n'ai pas vu de problèmes de performances ? (si tu parles du temps d'affichage avec la trackbar, c'est normal, un petit intervalle de temps est passé entre chaque OnChange quand on fait glisser).

Cordialement, Bacterius !

PS : bon supprime la source, j'ai dû oublier quelque chose de fondamental dedans. Je m'y reprendrai plus tard en changeant de méthode. Cette source n'apporte rien en fait.
Utilisateur anonyme
18 avril 2009 à 19:18
Bon mon code, dans un premier temps, il gère totalement le 32 Bit ce que le tiens ne fait plus (du coup) le canal Alpha est indépendant de l'opacité globale.

donc si tu charge le même bitmap dans mon code (bouton de droite) et tu joues avec le Slide tu obtiens le même résultat.

avec la même image que tu utilises quand tu ne touches pas au canal Alpha le bleu du bloc note est transparent (translucide) ce qui n'est plus le cas chez toi !!!

ensuite j'ai aussi toutes les fonctions utiles pour dessiner le bitmap sur tout autre DC !!!

au passage dans l'exemple le Bitmap32 est dessiné sur une image JPEG sans l'avoir convertie préalablement :D

pour corser le tout tu peux charger dans les deux TImage un Bitmap32 et jouer avec les deux slide (tu verras que tout est respecté et fluide)
et tu peux aussi prendre un PNG l'ouvrir avec TheGimp (par Ex.) et l'enregistrer en BMP32 et tu pourras l'ouvrir en ayant conservé toutes couches ;)

sinon le reste c'est pas utile ... j'accède et transforme les pixels (Alpha compris) beaucoup plus vite avec un accès à Scanline !!!
par contre niveau performance c'est la cata. le résultat est saccadé et surtout le rendu d'origine n'est plus respecté !!!!

je te conseil d'abandonner cette voie (pour t'en convaincre) essaye une animation avec ta méthode et la mienne (tu peux même utiliser TImage (beaucoup plus lourd) je suis certain que c'est toujours plus rapide)
si tu veux quand même continuer il faut changer de méthode alors, passer par un Dib ... j'ai aussi un code avec cette méthode ... c'est pas mal niveau perf mais ça n'apporte rien de plus !!!
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
18 avril 2009 à 18:15
Ah au fait je dis "la source de Cirec (qui m'a semblé ne pas profiter de la totalité des capacités du canal alpha)", peut-être que j'ai mal compris cette dernière, dans ce cas je retire mes paroles (en fait, il me semble que la source de Cirec traite chaque pixel avec la même valeur alpha, ou eventuellement fait la distinction entre la couleur transparente et les autres, c'est pourquoi ici je fais en sorte de donner des valeurs alpha différentes aux pixels).

Cordialement, Bacterius !
Rejoignez-nous