Question sur le zoom de Photofiltre

Discussion de programmation pour éviter d'empiéter dans les autres forums

Modérateurs : Modérateurs, Développeurs

JeremK
Nouveau(elle)|Nouveau|Nouvelle
Nouveau(elle)|Nouveau|Nouvelle
Messages : 21
Inscription : 28 juin 2007 16:52

Question sur le zoom de Photofiltre

Message 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
Antonio
Administrateur(trice)|Administrateur|Administratrice
Administrateur(trice)|Administrateur|Administratrice
Messages : 12783
Inscription : 28 oct. 2003 22:49

Re: Question sur le zoom de Photofiltre

Message 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:
JeremK
Nouveau(elle)|Nouveau|Nouvelle
Nouveau(elle)|Nouveau|Nouvelle
Messages : 21
Inscription : 28 juin 2007 16:52

Re: Question sur le zoom de Photofiltre

Message 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.
Antonio
Administrateur(trice)|Administrateur|Administratrice
Administrateur(trice)|Administrateur|Administratrice
Messages : 12783
Inscription : 28 oct. 2003 22:49

Re: Question sur le zoom de Photofiltre

Message 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:
JeremK
Nouveau(elle)|Nouveau|Nouvelle
Nouveau(elle)|Nouveau|Nouvelle
Messages : 21
Inscription : 28 juin 2007 16:52

Re: Question sur le zoom de Photofiltre

Message 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é.
Antonio
Administrateur(trice)|Administrateur|Administratrice
Administrateur(trice)|Administrateur|Administratrice
Messages : 12783
Inscription : 28 oct. 2003 22:49

Re: Question sur le zoom de Photofiltre

Message 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).
JeremK
Nouveau(elle)|Nouveau|Nouvelle
Nouveau(elle)|Nouveau|Nouvelle
Messages : 21
Inscription : 28 juin 2007 16:52

Re: Question sur le zoom de Photofiltre

Message 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.
Antonio
Administrateur(trice)|Administrateur|Administratrice
Administrateur(trice)|Administrateur|Administratrice
Messages : 12783
Inscription : 28 oct. 2003 22:49

Re: Question sur le zoom de Photofiltre

Message par Antonio »

Je déplace dans la partie programmation :wink: