Gambas France BETA


Pas de compte ? Incription

remimentionnement apres overture form

Ce sujet est résolu.

1
AuteurMessages
jibi#1 Posté le 22/4/2020 à 14:16:32
codergambas.jimdofree.comBonjour à vous :-)
dans form_open j'ai un dimensionnent d'image tel que :

cote = Desktop.H * zoom
myImg = myImg.Image.Stretch(cote, cote).Picture
myImg.Save(chemin & "/myImg.jpg")

A l'ouverture de la form tout est ok
Mais lorsque je modifie le zoom avec un slider, il y a l'erreur
enable to save picture dans fmain pour la ligne myImg.Save(chemin & "/myImg.jpg")

la sauvegarde se fait avec chemin = user.Home & "/.appliGambas"
Cette image une fois redimensionnée et sauvegardée est positionnée dans un pictureBox
zoom varie de 0.1 à 1 et sert à modifier la taille de la form
et dans form_arrange

Me.H = NBL* cote + Panel1.H
Me.W = Me.H + 50

Pourquoi à l'ouverture la sauvegarde cette image est possible et pas ensuite ?
Debian GNU/Linux 11 64-bit

valaquarus#2 Posté le 22/4/2020 à 17:00:19
-- Unus Ex Altera --Bonsoir,
myImg = myImg.Image.Stretch(cote, cote).Picture
installation dans la picture
myImg.Save(chemin & "/myImg.jpg")
cette commande essaye de sauvegarder la picture pas l'image donc tu as une erreur.
Sépare la commande d'installation de l'image dans la picture et la sauvegarde de l'image et normalement ça devrait le faire.
Philippe
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.3
jibi#3 Posté le 22/4/2020 à 18:50:56
codergambas.jimdofree.comBonsoir valaquarus,

Ces deux commandes fonctionnent à l'ouverture de la form, pourquoi est ce que cela ne fonctionne plus ensuite ?

Sépare la commande d'installation de l'image dans la picture et la sauvegarde de l'image

Séparer myImg = myImg.Image.Stretch(cote, cote).Picture et myImg.Save(chemin & "/myImg.jpg") ? dans deux fonctions différentes ?

Debian GNU/Linux 11 64-bit

valaquarus#4 Posté le 22/4/2020 à 22:06:26
-- Unus Ex Altera --Normal à l'ouverture tu charges l'image et la mets dans la picture mais après tu demandes de sauvegarder la picture puisque tu as dis myimg=la picture. J'aurais chargé l'image par image.load puis après j'aurais affecté l'image dans une picture (bien que tu l'as dit cela fonctionne à l'ouverture) puis à la fermeture après tous les traitements fait je sauvegarderai l'image par image.save après avoir affecté le résultat de mes traitements dans une image récupérée de la picture. Un truc du genre pour charger les images :
1
2
3
4
5
6
7
8
9
10
DIM hImage AS Image
DIM mhImage AS NEW Image[]
DIM sFile AS STRING
DIM Height, Width, dH, dW AS INTEGER

FOR EACH sFile IN mFileImage
hImage = Image.Load(sFile)
hImage = hImage.Stretch(Width, Height)
mhImage.Add(hImage)
NEXT

mFileImage étant un tableau string[] qui aurait récupéré les images du répertoire que je sonde.
Pour la sauvegarde reste plus qu'à faire après tous les traitements que tu veux :
1
2
hImageTmp = hImageMain.Copy(0, 0, hImageMain.Width, hImageMain.Height)' ou n'importe quelle image autre que hImageMain
hImageTmp.Save(le path qui va bien) 'sauve l'image temporaire dans l'endroit et avec le nom qui va bien

Les images et les pictures ne fonctionnent pas de la même manière et moi aussi j'ai mis un certain temps à comprendre pourquoi il y avait deux objets qui représentaient la même chose en fait il représentent la même chose mais de deux manières différentes avec des particularités d'affichage et de traitement différents avec une gestion de la mémoire séparée et différente donc leur utilité est fonction de ce que tu veux en termes de rapidité d'affichage et quantité de traitement. Si tu traites une image à la fois,[ les pictures sont rapides à l'affichage mais pour sauvegarder tu es obligé de repasser par une image. Si par contre tu traites tout un répertoire pour affichage de toutes les photos, les images sont à mon avis plus adaptées même si plus lente à l'affichage.
je transformerai ainsi :
1
2
3
4
cote = Desktop.H * zoom
myImg = myImg.Image.Stretch(cote, cote).Picture
myImgTemp=myImg.Copy(0, 0, myImg.Width, myImg.Height)
myImgTemp.Save(chemin & "/myImg.jpg")

En espérant que ça fonctionne.
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.3
valaquarus#5 Posté le 22/4/2020 à 22:44:29
-- Unus Ex Altera --Rebonsoir,
pour comparaison je mets ici deux fonctions que j'utilise, l'une charge les fichiers image dans des pictures, l'autre fait exactement la même chose mais dans des images, l'affectation est la même sauf à destination soit de picturebox[] soit de image[]. avec les pictures il suffit de les affecter, pour les images il faut les dessiner (Draw) d'où l'utilisation de DrawingArea[] :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
PUBLIC FUNCTION DrawImagesPictBox(mhImage AS Image[], Parent AS Container, SizeArea AS INTEGER) AS PictureBox[]

DIM hImage AS Image
DIM hPict AS PictureBox
DIM tag AS INTEGER
DIM mhPict AS NEW PictureBox[]

Parent.Children.Clear()
tag = 1
FOR EACH hImage IN mhImage
hPict = NEW PictureBox(Parent)
hPict.Tag = tag
Object.Attach(hPict, FMain, "hArea")
hPict.Mode = PictureBox.Contain
hPict.Border = 3
hPict.Width = SizeArea
hPict.Height = SizeArea
hPict.Alignment = 3
hPict.Picture = hImage.Picture' affectation de l'image dans la picturebox
mhPict.Add(hPict)
tag = tag + 1
NEXT
RETURN mhPict

END

PUBLIC FUNCTION DrawImages(mhImage AS Image[], Parent AS Container, SizeArea AS INTEGER) AS DrawingArea[]

DIM hImage AS Image
DIM hArea AS DrawingArea
DIM mhArea AS NEW DrawingArea[]
DIM tag AS INTEGER

Parent.Children.Clear()
tag = 1
FOR EACH hImage IN mhImage
hArea = NEW DrawingArea(Parent)
hArea.Tag = tag
Object.Attach(hArea, FMain, "hArea")
hArea.Cached = TRUE
hArea.Border = 3
DrawImage(hImage, hArea, SizeArea)' c'est une autre fonction qui s'occupe de dessiner l'image
mhArea.Add(hArea)
tag = tag + 1
NEXT
RETURN mhArea

END

personnellement le résultat me plaît plus avec les images car je travaille sur les fichiers alors qu'avec les pictures tu travailles sur un objet éphémère en mémoire ; c'est d'ailleurs pour ça qu'il y a une zone mémoire réservée aux pictures qu'il ne faut pas oublier de vider (flush) sous peine de rapide saturation de celle-ci mais c'est rapide à charger et à afficher.
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.3
jibi#6 Posté le 23/4/2020 à 10:19:53
codergambas.jimdofree.comouaaa merci pour ces réponses valaquarus !

je vais prendre le temps d'étudier tes propositions

Effectivement le traitement des images est à destination d'un tableau de picturebox !

Je te tiens au jus, encore merci beaucoup
Debian GNU/Linux 11 64-bit

jibi#7 Posté le 23/4/2020 à 14:40:38
codergambas.jimdofree.comj'ai repris mon code et cela est ok maintenant en utilisant
1
2
3
4
5
'cela ne fonctionnait pas
hImageTmp = hImageMain.Copy(0, 0, hImageMain.Width, hImageMain.Height)
'j'ai fait
hImageTmp = hImageMain.Image.Copy(0, 0, hImageMain.Width, hImageMain.Height)
hImageTmp.Save(le path qui va bien)

Merci à toi :D
Debian GNU/Linux 11 64-bit

1