Rééchantillonnage bicubique vs stretchblt

Soyez le premier à donner votre avis sur cette source.

Vue 4 312 fois - Téléchargée 590 fois

Description

Suite à une question de Sisi231 sur le ré-échantillonnage bicubique
http://www.delphifr.com/infomsg.aspx?ID=1603600
et comme j'ai rien trouvé en Pascal sur ce sujet j'ai décidé de traduire une procédure écrite en C par Paul Bourke et de la comparer à la bonne vielle méthode du StretchBlt en mode HALFTONE.

Les résultats montre que StretchBlt est quasi toujours la meilleur méthode.

Néanmoins la méthode bicubique présente un avantage qui peut avoir son poids ... elle conserve le canal alpha des bitmap 32bits contrairement à StretchBlt qui l'ignore totalement.

les versions ASMBicubic (de Barbichette), pré-calculéeBicubic et StretchBmpAlpha3 (de Pseudo3) ont étés ajoutées au code

Source / Exemple :


Bicubic Interpolation for Image Scaling
http://paulbourke.net/texture_colour/imageprocess/

Original C code Written by Paul Bourke
http://paulbourke.net/libraries/bitmaplib.c

Pascal version by Cirec 2012
  add: Callback methode to step a ProgressBar

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
16
Moi, je pensais que le Timage.Picture.Bitmap était déjà créé mais avec ses Width et Height à zéro...

Sinon, un lien intéressant sur le canevas du TImage :

http://delphi.developpez.com/faq/?page=compopropri#dessinersurcanvas2timage
Messages postés
220
Date d'inscription
lundi 30 octobre 2000
Statut
Membre
Dernière intervention
15 juillet 2013

Ben les filles... ça papote, ça papote, ça papote...
On ne peut pas partir une semaine sans avoir un roman photo au retour...

Je reviens de loin avec le Timage.Canvas et Timage.Picture.Bitmap.Canvas. En regardant (sous D7), c'est la même chose.
Timage.Canvas renvoi le canvas de Timage.Picture.Bitmap si il existe déjà.
Sinon, il crée ce fameux Picture.Bitmap et renvoi ce canvas.

Pour le reste, continuez à optimiser, on va arriver à des temps de calcul négatifs...
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
16
« mais j'ai pas de photo plus récente »
Bon. Alors, SURTOUT, laisse tomber.

En théorie, sur une machine 64bits il devrait être possible de doubler les performances. En effet, les couleurs restent codées de la même façon (sur 3 ou 4 bytes), et le processeur permet de traiter 8 bytes à la fois, soit 2 pixels. Or, ce qui prend du temps, c'est d'aller chercher ou de changer les composantes de la couleur des pixels en mémoire. Le faisant à chaque fois pour 2 pixels, ça doit forcément aller plus vite.

Bien sûr, il faudra alors faire deux codes. Un pour les machine 32bits et un autre pour les 64bits. C'est pour cette raison que la compilation conditionnelle m'intéresse beaucoup et je vais y jeter un oeil car j'y connais encore rien.
Merci pour cette MAJ, Cirec !

PS: Ma prochaine machine sera à coup sûr une 64bits car trop impatient de tester tout ça...
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
42
"Mais j'serais toi, je changerais quand même d'avatar..."
mais j'ai pas de photo plus récente ^^

Bon, j'ai eu l'occasion de tester et je peux confirmer les propos de Caribensila
"je pense que sur une machine en 64 bits, le Double doit avoir de meilleures performances."

effectivement le Double arrive en tête sur une 64 bits suivi par Extended et loin derrière le Single

La version ASM ne compile pas sous 64bits problème de registre .. ce qui semble normale ...

j'ai donc modifié le code pour permettre de le recompiler rapidement avec le type choisi (Extended, Double ou Single) grace à la compilation conditionnelle ... et il affiche dans la barre de titre la
version du compilateur utilisé (D7, D2009, XE2) le type d'os (32/64 bits) et le type choisi (Extended, Double ou Single) ... j'en avais marre de douter de la version, quand on en teste plusieurs ça aide beaucoup ;)

Maintenant comme le code est devenu plus difficile à lire, à cause de la compilation conditionnelle, et tout le monde ne veux pas forcément ceci, j'ai mis cette version dans un répertoire nommé "Version Custom"

pour changer de type il suffit d'éditer le fichier "Types.inc" et d'activer/désactiver le type voulu
et reconstruire le projet ... simple non !

@++
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
16
Franchement, ça m'étonnait aussi beaucoup de ta part.
(Mais j'serais toi, je changerais quand même d'avatar...)

Enfin, on voit bien que t'as rien perdu de ton talent et si je pouvais, je remettrais un nouveau 10/10 pour cet excellent travail.
Afficher les 48 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.