Page 1 sur 1

Question sur le zoom de Photofiltre

Publié : 30 juil. 2008 21:47
par JeremK
Bonjour,

Je suis actuellement en train d'écrire un programme afin de créer des skins pour le logiciel VirtualDJ.

Une skin de VirtualDJ se compose d'un fichier image (.bmp) et d'un fichier de code (.xml). Le fichier de code contient les positions de chaque élément, bouton, texte, slider etc.

Actuellement, pour créer des skins, j'utilise notepad2 pour l'affichage du xml, et photofiltre pour l'affichage de l'image.
Le problème c'est que je dois récupérer des coordonnées d'une sélection dans photofiltre pour ensuite les écrire à la main dans notepad2.
C'est pour celà que j'ai commencé l'écriture d'un programme qui affiche l'image, l'utilisateur peut ensuite faire une sélection et en deux clics, mettre les coordonnées de la sélection dans le xml.

Mon problème est le suivant:
Je n'arrive pas à afficher de zoom de l'image et j'aimerai savoir comment celà est fait dans Photofiltre. Je programme en RealBasic, et il y a bien une fonction pour redimmensionner une image, mais c'est un redimensionnement et non un zoom comme on peut le faire à la molette de la souris dans Photofiltre.

J'ai tout de même réussi à créer une fonction qui fait un zoom mais le temps de calcul est assez long.

Est-ce que Photofiltre utilise la bibliothèque gdi32.dll pour faire ce zoom, et plus spécialement, la fonction StretchBlt ?

Mon programme n'est aucunement un concurrent à Photofiltre, c'est pour cela que je me permet de demander ça.

Cordialement,

JeremK

Re: Question sur le zoom de Photofiltre

Publié : 31 juil. 2008 14:04
par Antonio
Dans la version 6 de PF j'utilise essentiellement l' api windows StretchBlt

Dans la version studio, c'est une lib que j'ai programmé en Delphi vu que ça doit gérer les modes de fusion et la transparence. C'est un peu plus lent mais en théorie mais en pratique, je trouve pas trop :oops:

Re: Question sur le zoom de Photofiltre

Publié : 31 juil. 2008 15:11
par JeremK
Ok, merci pour l'info.

Malheureusement mon langage de programmation (REALBasic) gère mal l'utilisation de StretchBlt pour dessiner dans une image. Seul le dessin dans un canvas est possible, et ensuite quand je dessine la boite de sélection ça fait des saccades dans l'image.

J'espère trouver une solution sur le forum de REALBasic.

Re: Question sur le zoom de Photofiltre

Publié : 01 août 2008 11:47
par Antonio
Seul le dessin dans un canvas est possible
==> s'il faut travailler en mode pixel par pixel, ça va pas être rapide en effet :cry:

Re: Question sur le zoom de Photofiltre

Publié : 01 août 2008 12:52
par JeremK
Merci pour les précisions Antonio.

Donc dans photofiltre il y aurai 2 canvas superposés? un pour afficher la sélection et l'autre pour afficher l'image zoomée?

Pour l'instant je travaille en pixel par pixel sur une zone qui fait la taille du canvas / (zoom/100).
Ce n'est pas trop lent, quand on a un pc puissant pour passer du zoom 100% à 200% par exemple. Mais ensuite quand l'utilisateur bouge un scrollbar pour se déplacer dans l'image, là c'est plus lent.

Un affichage identique à photofiltre dans mon programme serait le must. Mais vu que je débute en programmation c'est loin d'être gagné.

Re: Question sur le zoom de Photofiltre

Publié : 01 août 2008 17:21
par Antonio
Attention, il ne faut pas zoomer la totalité de l'image juste pour en afficher une partie. Il faut calculer la partie de l'image nécessaire (sans zoom) qui sera affichée (une fois zoomée).
Il faut toujours travailler par clipping sinon sur une image de 4000 pixels en zoom 16 on dépasse les limites physiques de n'importe quel PC même actuel :wink:

Quelques règles de 3 avec des marges d'erreurs. Ensuite on applique un StretchBlt (ou autre) sur la partie de l'image non zoomée vers le canvas (affichage avec zoom).

Re: Question sur le zoom de Photofiltre

Publié : 01 août 2008 19:09
par JeremK
En effet je m'en suis rendu compte. Avec un zoom 16, la mémoire utilisée par mon programme montait à 550Mo.
J'ai corrigé ça, et c'est devenu plus rapide.

Re: Question sur le zoom de Photofiltre

Publié : 02 août 2008 11:13
par Antonio
Je déplace dans la partie programmation :wink: