Gambas France BETA


Pas de compte ? Incription

Comportement bizarre de DrawingArea

1
AuteurMessages
Gamuti#1 Posté le 4/7/2011 à 09:48:00
Bonjour à toutes et à tous.

Je suis en train de me mettre dans le bain des DrawingArea. C'est tout nouveau pour moi bien que je programme en gambas depuis quelques années.
Seulement voilà, Les DrawingArea me posent des problèmes. D'ailleurs, j'ai plusieurs questions à ce sujet :
1/ À quoi sert la propriété CACHED de l'objet DrawingArea ? Ou pourquoi l'image s'affiche lorsque CACHED est positionné à TRUE ?
2/ Pourquoi lorsqu'on fait un ...SAVE... (je passe les lignes de codes), ça enregistre l'image , ou du moins, pourquoi ça n'enregistre que la partie visible de l'image.

Exemple concret, on a une image de grande dimension, forcément, elle dépasse de l'écran, du coup, lorsqu'on enregistre l'image avec SAVE, alors la partie visible est bien enregistrée mais la partie invisible (il faut donc déplacer les ascenseurs) est enregistrée mais avec un comportement anormal (répétition d'une partie de l'image, et/ou sauvegarde d'un objet situé au dessus de l'image - comme un label - un bouton...) ?
gambix#2 Posté le 4/7/2011 à 10:11:00
Faire simple !Bien gamuti,

Drawing area est certainement l'un des objet gambas qu'on a le plus travaillé !.... donc forcément le plus complet et le plus complexe.

Il sert a la fois a faire des affichage graphique libre , manipulation d'image, graph, et tout autre dessin, qu'a créer des composant graphique.
Par exemple on a réécrit le iconview de gb3 tout en gambas !

Un fois qu'on aura bouclé gambasforge, on essaiera de se concentrer sur les exemples.


Mais bon pour cached ça dit simplement que l'image autogénère en interne une varable qui stock le dessin courant. Et donc le réaffiche quand le rafraichissement est nécéssaire.

Honnêtement il y a bien longtemps que je n'utilise plus ça. Pou l'enregistrement de l'image heu ... ben bug ?


En programmation avancée, on préfère gérer directement l'affichage via l'evènement _draw



Par exemple :


1
PRIVATE hImg AS ImagePrivate X,Y AS IntegerPrivate hTimer AS TimerPublic sub _New() hTimer = NEW Timer AS "Timer1" hTimer.Delay = 100 hImg = Image.load("monimage")EndPublic sub DrawingArea1_Draw() Draw.Image(hImg,0,0)EndPublic Sub btnChangPic_Click() hImg=Image.Load("monimage2") DrawingArea1.RefreshEndPublic Sub Timer1_Timer() INC x INC y DrawingArea1.RefreshEndPublic Sub btnMove_Click() X= 0 Y = 0 Timer1.Enabled = NOT Timer1.EnabledEnd



Bon la ya besoin D'un formulaire, deux bouton (btnChangepic et btnMove), et d'un drawingarea nommé DrawingArea1


Le premier bouton va provoquer le changement d'image

L'autre un déplacement en diagonale ça a juste pour but de montrer comment gérer les image en mode donnée/vue... il faut arrêter de vouloir stocker les donnée dans les widget ... c'est une mauvaise habitude... et c'est pas très intéressant.
Moins de texte dans une signature c'est agrandir son espace.
Gamuti#3 Posté le 5/7/2011 à 10:07:00
Merci de la réponse.

Finalement, pour le moment, je laisse de côté les DrawingArea et j'utilise une voie de contournement (via le shell) pour manipuler les images. Et le résultat sera envoyé dans une PictureBox car ça m'a l'air plus facile à mettre en œuvre.

En fait, je suis en train de réaliser un soft pour la manipulation, transformation des images (floutage, créer des sinusoïdes, lecture de tous types de format d'image... enfin toutes les fonctions que peut réaliser un Gimp ou un Photoshop)

Je vous posterai les sources, pour ceux que ça intéresse, dès que le soft sera un peu plus conséquent.

Comme quoi, on peut faire de belle réalisation sous gambas !
gambix#4 Posté le 5/7/2011 à 13:07:00
Faire simple !mouais... un logiciel de manipulation d'image ... tu les prend ou les routine de manipulation ?


imagemagik ?

enfin la c'est plus un viewer que tu es en train de faire... vu qu'il a juste a charger les images.
Moins de texte dans une signature c'est agrandir son espace.
Gamuti#5 Posté le 6/7/2011 à 08:14:00
Oui, dans un premier temps, c'est à peu près cela.
Il s'agit d'un frontend d'imageMagick.

Par la suite, je comptais remplacer tous les shell par du code gambas pur (ça risque d'être rock'n'roll).
Car un soft qui ne fait que de la lecture d'image, ça n'a aucun intérêt. Il y en a plein sur le net.
Le but étant d'avoir une interface graphique qui (je ne cherche pas la gloire) tente à concurrencer les soft comme The gimp, Photoshop, Paint Shop Pro, j'en passe...
Il y a énormément de travail qui m'attend quand à la réalisation de ce projet.
Quand on s'ennuie, il faut bien s'occuper !

En fait, j'ai une petite question à poser :

Comment fait-on pour enregistrer l'image contenu dans une PictureBox ? car, à priori, ce n'est pas la même méthode que pour une DrawingArea.
Il n'y a pas la propriété SAVE pour une PictureBox.
gambix#6 Posté le 6/7/2011 à 11:29:00
Faire simple !mdr, ça me rapelle mes 15 ans :)

mais je crois que tu vise un peu haut (surtout pour un soft en basic)... m'enfin libre a toi !


Pour sauvegarder :

Picturebox.picture.image.save("")


a condition d'avoir sélectioneer gb.image.io

(je parle bien sur de gb3)

pourquoi chercher a sauvegarder... une image qui est déja sous format fichier ??

tu fait une modif dans ta picturebox ?
Moins de texte dans une signature c'est agrandir son espace.
Gamuti#7 Posté le 6/7/2011 à 13:36:00
mdr, ça me rapelle mes 15 ans :)


Justement, je n'ai pas 15 ans.
Je n'en ai que 14 !!

Hélas, non, je n'ai pas gambas 3. Gambas 2 uniquement.

Je vais tenter ta solution malgré le manque du paquet io.
gambix#8 Posté le 6/7/2011 à 13:38:00
Faire simple !disons qu'avec gambas3 tu a même les filtres de manipulation d'image :)
Moins de texte dans une signature c'est agrandir son espace.
Gamuti#9 Posté le 7/7/2011 à 09:47:00
Diable !
Ça devient intéressant de si mettre.

Je vais regarder pour installer gambas3 sur mon PC.
spheris#10 Posté le 8/7/2011 à 09:16:00
Gamuti,
en GB2 j'ai ça à te proposer:

http://gambaslinux.eg2.fr/articles.php?lng=fr&pg=489

A+
;) ;)
1