Gambas France BETA


Pas de compte ? Incription

Est-ce possible d'améliorer l'affichage image ?

1
AuteurMessages
Foromus#1 Posté le 22/12/2016 à 18:42:03
Bonjour,

Tout est dans le titre.
J'ai quand même remarqué que lorsque j'affiche une image (photo) dans un projet Gambas, la qualité n'est pas vraiment au top.
Bien entendu, je ne vais pas comparer avec visualiseur, même celui par défaut (Ristretto). Et encore moins Geeqie...
Mais je suppose qu'il n'y a pas grand chose à faire.
gambix#2 Posté le 22/12/2016 à 19:38:27
Faire simple !bien il faudrait que je vois ton code pour ça :-)
Moins de texte dans une signature c'est agrandir son espace.
Foromus#3 Posté le 23/12/2016 à 14:01:57
Bonjour,

Le code (réduit) :
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
49
50
51
52
53
54
55
56
PUBLIC Conteur AS INTEGER


PUBLIC SUB Form_Open()

ME.Height = Desktop.Height
ME.Width = Desktop.Width

pnSupport.Height = pnSupport.Width - 50
pnSupport.Width = pnSupport.Height * 1.35


pnSupport.X = (FMain.Width - pnSupport.Width) / 2
pnSupport.Y = (FMain.Height - pnSupport.Height) / 2

' Si je mets :
picFoto.Height = pnSupport.Height - 10
picFoto.Width = pnSupport.Width - 10
picFoto.X = 5
picFoto.Y = 5

picFoto.Stretch = FALSE
' picFoto.Stretch = True

Conteur = 1
Affiche

END

PUBLIC SUB Affiche()
' Dim N As Integer

' For N = 1 To 5
' picFoto.Picture = New Picture
' picFoto.Refresh

picFoto.Picture = Picture[Application.Path & "/Anex/Photos/Foto" & (100 + Conteur) & ".jpg"]
' Wait 2
' Next

END

PUBLIC SUB Button1_Click()

ME.Close
QUIT

END

PUBLIC SUB Button2_Click()

Conteur += 1
IF Conteur > 25 THEN Conteur = 1
Affiche

END


Au fond, je pense avoir trouvé, c'est tout simplement qu'avec la propriété stretch, les images sont beaucoup trop agrandies (les images de base font 990x732).
Après, je me pose la question : comment font les visionneur quand on passe à "plein écran" ? J'ai vu, pour Geeqie, qu'il était question de deux passes et de je ne sais plus quoi.
Simplement, si j'ai porté ici le code, c'est juste pour voir si il y a une amélioration possible, sinon, je m'en passerai.

J'ai aussi tenté un affichage automatique avec un wait, mais ça plante complètement. Si je veux faire, je prendrai un Timer
(Pas d'urgence pour la réponse, merci !)
gambix#4 Posté le 23/12/2016 à 15:35:19
Faire simple !Dis moi dans la logithèque, il y a un projet Nommé Photo Touch. Tu peux me dire si quand tu affiche des image avec ce petit utilitaire tu a le même problème ?


Je crois que le soucis en faite c'est que le propriété Stretch de Picture Box ne respecte pas la proportionnalité. Elle se contente d'étirer l'image.

Pour garder les proportion il faut appliquer un ratio qui dépent du rapport a la longueur la plus importante du contenu a celle la moins importante du conteneur.
J'en ai pas mal fait en travaillant sur gb.report.


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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
PUBLIC SUB _Paint(Page AS INTEGER, X AS FLOAT, Y AS FLOAT, hControl AS TControl, DataIndex AS INTEGER)

DIM ix, iy AS FLOAT
'Dim hBrush As PaintBrush
DIM hPic AS Image

DIM w, h AS FLOAT

ix = x + hControl.RealLeft '+ Me.Report._ToPixels(Me.Padding._Left)
iy = y + hControl.RealTop '+ Me.Report._ToPixels(Me.Padding._Top)

IF NOT $hpic THEN
RAISE Data(DataIndex)
hpic = Data
IF NOT hPic THEN RETURN
ELSE
hPic = $hpic
ENDIF

Paint.Save
Paint.Rectangle(ix, iy, hControl.RealWidth, hControl.RealHeight)
Paint.Clip

'$hPic = $hPic.Stretch(hControl.RealWidth, hControl.RealHeight)

'hBrush = Paint.Image(hpic)

IF ME.Stretch = Report.Fill THEN
iX += ME.Report._ToPixels(ME.Padding._Left + ME.Border._Left)
iY += ME.Report._ToPixels(ME.Padding._Top + ME.Border._Top)
w = (hControl.RealWidth - ME.Report._ToPixels(ME.Padding._Left + ME.Padding._Right + ME.Border._Left + ME.Border._Right))
h = (hControl.RealHeight - ME.Report._ToPixels(ME.Padding._Top + ME.Padding._Bottom + ME.Border._Top + ME.Border._Bottom))

Paint.DrawImage(hpic, ix, iy, w, h - 1)

ELSE

IF $iStretchMode = Report.Proportional THEN
'on détermine la partie prédominante
IF hpic.Width >= hpic.Height
'C'est la largeur
'on détermine une hauteur en fonction de la largeur connue
w = hControl.RealWidth - ME.Report._ToPixels(ME.Padding._Width)
h = hPic.H / hpic.W * w
'si h> a la place disponible alors on adapte en fonction de h en faite
IF h > (hControl.RealHeight - ME.Report._ToPixels(ME.Padding._Height)) THEN
h = (hControl.RealHeight - ME.Report._ToPixels(ME.Padding._Height))
w = hpic.w / hpic.H * h
ENDIF

ELSE
'C'est la hauteur
h = (hControl.RealHeight - ME.Report._ToPixels(ME.Padding._Height))
w = hpic.w / hpic.H * h
'si w> la place disponible alors on adapte en fonction de w en faite
IF w > (hControl.RealWidth - ME.Report._ToPixels(ME.Padding._Width)) THEN
w = hControl.RealWidth - ME.Report._ToPixels(ME.Padding._Width)
h = hPic.H / hpic.W * w
ENDIF
ENDIF

ELSE
w = hpic.Width
h = hpic.H

ENDIF

SELECT CASE $iAlignment
CASE Align.Normal, Align.TopLeft, Align.Left, Align.BottomLeft
'Gauche
ix += ME.Report._ToPixels(ME.Padding._Left)
CASE Align.Bottom, Align.Center, Align.Top
'centrée
ix += (hControl.RealWidth - w) / 2

CASE Align.TopRight, Align.Right, Align.BottomRight
'Droite
ix += hControl.RealWidth - ME.Report._ToPixels(ME.Padding._Right) - w
END SELECT

SELECT CASE $iAlignment
CASE Align.TopLeft, Align.Top, Align.TopRight
'Haut
iy += ME.Report._ToPixels(ME.Padding._Top)
CASE Align.Left, Align.Center, Align.Right
'Milieu
iy += (hControl.RealHeight - h) / 2
CASE Align.BottomLeft, Align.Bottom, Align.BottomRight
iY += hControl.RealHeight - ME.Report._ToPixels(ME.Padding._Bottom) - h
END SELECT

Paint.DrawImage(hpic, ix, iy, w, h - 1)

ENDIF
Paint.Fill
Paint.Restore
END
Moins de texte dans une signature c'est agrandir son espace.
Foromus#5 Posté le 23/12/2016 à 17:39:56
Gambix,

Pas trouvé Photo Touch, ni dans la logithèque, ni même dans Synaptic (xubuntu).
Effectivement, il y a un meilleur rendu quand stretch n'est pas activé. Mais la résolution de l'image y est aussi pour beaucoup.
Bon, ne vous cassez pas la tête avec ça, il est possible que dans quelques mois, la propriété sera nettement améliorée, pour le moment, je vais faire en sorte de proposer les deux affichages, juste une variable à mettre en plus, ce n'est pas bien long.
Ma question était plutôt de savoir si mon code n'était pas insuffisant (inadéquat, ça aurait planté), et éventuellement, une solution simple, sous forme de commande à ajouter par exemple.
Sauf besoin général pour la communauté, ne vous mettez pas en peine, je vais faire avec ce que j'ai.
Pour le code ci-joint, je vais voir en janvier si je peux expérimenter.
Merci beaucoup pour l'aide !
gambix#6 Posté le 23/12/2016 à 19:11:02
Faire simple !

Pas trouvé Photo Touch, ni dans la logithèque, ni même dans Synaptic (xubuntu).


Je parlais de la ferme de gambas ... menu Outil > logithèque... graphisme
Moins de texte dans une signature c'est agrandir son espace.
1