Gambas-it

Gambas3 => Programmazione => Topic aperto da: simo97 - 29 Maggio 2013, 21:24:06

Titolo: [risolto] immagine come "sfondo" al testo
Inserito da: simo97 - 29 Maggio 2013, 21:24:06
vorrei sapere come inserire un immagine sotto al testo, anche leggermente più trasparente per far leggere il testo...

scommetto che è una sciocchezza :D :D
Titolo: Re: immagine come "sfondo" al testo
Inserito da: Top Fuel - 29 Maggio 2013, 23:07:05
C'è qualcosa sul Wiki, ma riguarda Picturebox e Gridview.
Sulle Label e similari non so se sia possibile farlo.
Titolo: Re: immagine come "sfondo" al testo
Inserito da: vuott - 30 Maggio 2013, 03:24:23
scommetto che è una sciocchezza :D :D

Be'.... non è proprio proprio una sciocchezza !  :nono:

Come lascia intendere un po' Top Fuel, bisogna capire di quale oggetto, che dovrà contenere testo ed immagine, si sta parlando.

Se non intendi integrare testo in una immagine (creando così insomma una nuova immagine) da mostrare successivamente, ma invece intendi agire ...a crudo con testo ed immagine mantenuti come elementi ben distinti, allora suggerirei l'uso di una TextEdit. Poiché, però, la TextEdit non possiede una sorta di proprietà .Picture, capace di caricare direttamente le immagini, ci serviremo strategicamente, in alternativa, della proprietà .RichText e del codice HTML.
Volendo si potrà utilizzare anche una TextLabel; ma in tal caso si utilizzerà la proprietà .Text .

Facciamo un esempio pratico con una TextEdit:
Codice: gambas [Seleziona]

Public Sub Form_Open()

' Dichiariamo una variabile "Picture"...
   Dim p As New Picture

' ...con la quale carichiamo l'immagine, che farà da sfondo;
' ma la carichiamo qui solo per ottenere successivamente le sue dimensioni:
    p = p.Load("[i]immagine_che_sarà_caricata_poi_come_sfondo[/i]")

' Per caricare l'immagine effettivamente in una "TextEdit", bisogna crearvi
' una "Tabella" con gli appositi tag HTML .
' Si sfrutterà, così, la capacità della <TABLE> di caricare le immagini.
' Impostiamo le dimensioni della tabella in base alle dimensioni
' della immagine precedentemente caricata nella variabile di tipo "Picture".
' Con la proprietà "background=" della Tabella carichiamo effettivamente
' l'immagine nella predetta Tabella creata e dimensionata:
    TextEdit1.RichText = "<TABLE width=" & p.W & " height=" & p.H & " background=immagine_da_caricare_come_sfondo>" &
    "<TR><TD align=justify>Questo è un testo qualsiasi</td></tr></table>"

End

L'intero testo, che sarà contenuto nella TextEdit, affinché possa stare tutto al di sopra dell'immagine caricata, dovrà continuare ad essere gestito all'interno della cella (nel tag <TD> ) della Tabella. Quindi anche eventuali cambiamenti delle sue proprietà (colore, stile, etc) dovranno essere gestiti secondo il protocollo HTML.

...già !   :-X
Titolo: Re: immagine come "sfondo" al testo
Inserito da: simo97 - 30 Maggio 2013, 07:41:01
E io che pensavo fosse semplice....

Ma non si può portare dietro la picture box?
A modificarla ci penso prima di caricala...
Titolo: Re: immagine come "sfondo" al testo
Inserito da: vuott - 30 Maggio 2013, 13:43:23

Ma non si può portare dietro la picture box?
A modificarla ci penso prima di caricala...
Si potrebbe provare a porre una PictureBox al di sopra dell'oggetto di testo.
La PictureBox dovrebbe in tal caso avere una immagine semitrasparente (http://www.gambas-it.org/wiki/index.php?title=Rendere_semitrasparente_una_immagine).
Titolo: Re: immagine come "sfondo" al testo
Inserito da: simo97 - 30 Maggio 2013, 13:55:05
Mooolto bene :D :D :D
 :bravo:
Titolo: Re: immagine come "sfondo" al testo
Inserito da: vuott - 30 Maggio 2013, 15:01:33
Una terza possibilità sarebbe quella, se si necessita semplicemente di avere un testo fisso su una immagine sempre identica, di generare una immagine del tutto nuova inserendo il testo in un'immagine (http://www.gambas-it.org/wiki/index.php?title=Inserire_del_testo_in_una_Image_ed_in_una_Picture).
In tal caso si userebbe, per mostrare la nuova immagine ottenuta, ovviamente una PictureBox.
Titolo: Re: immagine come "sfondo" al testo
Inserito da: simo97 - 30 Maggio 2013, 15:38:09
la terza ipotesi mi sembra abbastanza appropriata....
Titolo: Re: immagine come "sfondo" al testo
Inserito da: simo97 - 30 Maggio 2013, 18:20:25
Codice: gambas [Seleziona]
Public Sub Form_Open()
Dim p As Picture
  p = picture.Load(Application.Path & "img/Loshu.gif")   ' carichiamo una immagine

  With Paint
    .begin(p)
    .Font.size = 10
    .DrawText("E ' una matrice di aspetto 3 × 3 contenente" &
"tutti gli interi da 1 a 9 senza ripetizioni." &
"Sommando i numeri sulle diverse righe," &
"colonne o diagonali si ottenga sempre" &
"lo stesso valore, che deve essere" &
"(1 + 2 + ...+9) / 3 = 15." &
&
"Perch è una Tartaruga?" &
"La leggenda narra che In Cina nei pressi" &
"villaggio si ebbe una disastrosa piena del" &
"fiume.F ù causata dall'ira del dio del fiume." &
"Egli per far capire quanti sacrifici volesse" &
"mando delle tartarughe con" &
"il quadro magico sopra il guscio.", 10, 10, 100, 100, 3)
    .End
  End With

  PictureBox2.Picture = p  
End

mi dà "unable to load picture"
ma il percorso è giusto....

e un altra cosa...
si può cambiare font alla scritta?
l'immagine va "trasparificata" (termine appena coniato, dicesi fatta diventare un pò trasparente) prima di caricarla (magari con gimp o similari)?

per ora è tutto :ciao:
Titolo: Re: immagine come "sfondo" al testo
Inserito da: vuott - 30 Maggio 2013, 18:38:39
Codice: gambas [Seleziona]
Public Sub Form_Open()
Dim p As Picture
  p = picture.Load(Application.Path & "img/Loshu.gif")   ' carichiamo una immagine

mi dà "unable to load picture"
ma il percorso è giusto....


Devi aggiungere la parola New :

Codice: gambas [Seleziona]

  Dim p As New Picture



e un altra cosa...
si può cambiare font alla scritta?

Sì con la proprietà .Name della proprietà .Font della Classe .Paint .
Titolo: Re: immagine come "sfondo" al testo
Inserito da: simo97 - 30 Maggio 2013, 18:53:21
aaaaaaaaaaaaaa
ci sarebbe da correggere nella wiki....

ok...


EDIT
non è cambiato nulla :'(
Titolo: Re: immagine come "sfondo" al testo
Inserito da: vuott - 30 Maggio 2013, 19:07:31
l'immagine va "trasparificata" (termine appena coniato, dicesi fatta diventare un pò trasparente) prima di caricarla (magari con gimp o similari)?
La semitrasparenza può essere applicata agevolmente ad un'immagine mediante il metodo Opacity() della Classe Image.
Poiché la semitrasparenza agisce su tutta l'immagine, affinché non sia soggetto anche il testo all'azione del predetto metodo Opacity(), è opportuno applicare la semitrasparenza sull'immagine originaria, prima di integrarla con il testo.

Pertanto io modificherei il tuo codice così:
Codice: gambas [Seleziona]

Public Sub Form_Open()

  Dim i As New Image
  Dim p As Picture  
  

' carichiamo una immagine in una variabile di tipo "Image":
    With i = i.Load(Application.Path &/ "img/Loshu.gif")
' Questo ci consente di applicarle la "semitrasparenza"
' (ad esempio un valore a virgola mobile di 0,3):
      .Opacity(0.3)
    End With
    
' Andiamo a trasformare l'immagine, integrandola con del testo:
    With Paint  
       .Begin(i)
       .Font.size = 10
' Cambiamo il font al testo (per curiosità qui inseriremo i caratteri greci):
       .Font.Name = "symbol"  
       .DrawText("E ' una matrice di aspetto 3 × 3 contenente" &  
    "tutti gli interi da 1 a 9 senza ripetizioni." &  
    "Sommando i numeri sulle diverse righe," &  
    "colonne o diagonali si ottenga sempre" &  
    "lo stesso valore, che deve essere" &  
    "(1 + 2 + ...+9) / 3 = 15." &  
    "Perch è una Tartaruga?" &  
    "La leggenda narra che In Cina nei pressi" &  
    "villaggio si ebbe una disastrosa piena del" &  
    "fiume.F ù causata dall'ira del dio del fiume." &  
    "Egli per far capire quanti sacrifici volesse" &  
    "mando delle tartarughe con" &  
    "il quadro magico sopra il guscio.", 10, 10, 100, 100, 3)  
       .End  
     End With  

' Procediamo a convertire l'immagine da "Image" a "Picture" ...
     p = i.Picture

'...cosicché potremo caricarla in una "PictureBox":
     PictureBox1.Picture = p    
    
    End
Titolo: Re: immagine come "sfondo" al testo
Inserito da: vuott - 30 Maggio 2013, 19:18:45
EDIT
non è cambiato nulla :'(
Scusami, non ho visto che hai usato direttamente il nome della Classe ".Picture" per caricare l'immagine. Quindi la parola New non è necessaria.
Sospetto che vi sia un problema nel percorso ove è situata l'immagine, e pertanto non riesce a caricarla.


ci sarebbe da correggere nella wiki....
Lì è stato usato il metodo Load() direttamente con il nome della Classe Picture, e non con la variabile di tipo Picture.
Quindi va bene, come detto prima.
Titolo: Re: immagine come "sfondo" al testo
Inserito da: simo97 - 30 Maggio 2013, 19:21:30
stessa cosa....

sto sospettando che il percorso sia sbagliato....

allora io ho l'immagine in
 /home/simone/Scrivania/Formulinux/img/Loshu.gif
e
Application.Path & "img/Loshu.gif"
dovrebbe essere lo stesso percorso
o sbaglio....

forse quache errore nel nome...
l'immagine è questa....
Titolo: Re: immagine come "sfondo" al testo
Inserito da: simo97 - 30 Maggio 2013, 19:25:18
Codice: gambas [Seleziona]
Dim i As Image  
[...]


così mi dà null object per ovvi motivi 
Titolo: Re: immagine come "sfondo" al testo
Inserito da: vuott - 30 Maggio 2013, 19:29:25
sto sospettando che il percorso sia sbagliato....

allora io ho l'immagine in
/home/simone/Scrivania/Formulinux/img/Loshu.gif
e
Application.Path & "img/Loshu.gif"
dovrebbe essere lo stesso percorso
o sbaglio....

 :violent:
Hai dimenticato uno slash nel percorso !

Codice: gambas [Seleziona]

With i = i.Load(Application.Path &/ "img/Loshu.gif")

o anche così:
Codice: gambas [Seleziona]

With i = i.Load(Application.Path & "/img/Loshu.gif")
Titolo: Re: immagine come "sfondo" al testo
Inserito da: simo97 - 30 Maggio 2013, 19:30:13
shit!!!!!!!!!!!!!!!!

ora va...
Titolo: Re: immagine come "sfondo" al testo
Inserito da: vuott - 30 Maggio 2013, 19:34:09
ora va...
Ora fai delle prove per la semitrasparenza e l'immissione del testo.
Facci sapere.

L'applicazione della semitrasparenza all'immagine, ovviamente, non è assolutamente necessaria, avendo tu scelto la terza ipotesi, in quanto il testo viene "disegnato" al di sopra della immagine. Però può essere utile una sua, seppur limitata, applicazione, qualora i colori ed il disegno dell'immagine dovesse determinare una difficile lettura del testo.

Comunque, questa discussione è stata interessante.  :coder:
Titolo: Re: immagine come "sfondo" al testo
Inserito da: simo97 - 30 Maggio 2013, 19:44:38
allora....

se fosse una riga serebbe ok
ma è un poema....
ho notato che non prende l'html (<br>) quindi devo optare per /n (non ricordo bene se è giusto....)

ma ora che ho l'immagine mezza trasparente non conviene metterci sopra una label che così si auto risolve il problema...

EDIT
si risolve ma il testo si "schiarisce" e a leggerlo ti schende di un grado la vista....
Titolo: Re: immagine come "sfondo" al testo
Inserito da: vuott - 30 Maggio 2013, 19:48:16
ho notato che non prende l'html (<br>) quindi devo optare per /n (non ricordo bene se è giusto....)
Il carattere escape \n va bene (...va usato però il backslash !)


ma ora che ho l'immagine mezza trasparente non conviene metterci sopra una label che così si auto risolve il problema...
Tu hai optato per la terza modalità:  :-\
http://www.gambas-it.org/smf/index.php?topic=2761.msg29142#msg29142

e quindi basta usare soltanto la PictureBox.
Titolo: Re: immagine come "sfondo" al testo
Inserito da: simo97 - 30 Maggio 2013, 19:54:17
si si.....

ho appena scoperto che il problema non esiste :D
allora...
-tasto destro sull'immagine
-disposizione
-porta allo sfondo <--
e l'immagine risulta sotto al testo :ciao:
Titolo: Re: immagine come "sfondo" al testo
Inserito da: vuott - 30 Maggio 2013, 20:00:16
-tasto destro sull'immagine
???
Sull'immagine... quando ?
Cioè su quale immagine ?
Titolo: Re: immagine come "sfondo" al testo
Inserito da: simo97 - 30 Maggio 2013, 20:02:14
errore
....sulla picture box....
Titolo: Re: immagine come "sfondo" al testo
Inserito da: vuott - 30 Maggio 2013, 20:05:54
Ah, dall'IDE di Gambas, e nel caso tu abbia posto una PictureBox al di sopra di un oggetto di testo.
Da codice si avrebbe:
Codice: gambas [Seleziona]

  PictureBox1.Lower


Nel tuo caso, però, non v'è necessità, poiché tu hai solo la PictureBox, nella quale hai caricato l'immagine modificata con l'aggiunta da codice del testo desiderato.
Titolo: Re: immagine come "sfondo" al testo
Inserito da: simo97 - 30 Maggio 2013, 20:35:44
ok
in ogni caso ho risolto
Titolo: Re: [risolto] immagine come "sfondo" al testo
Inserito da: simo97 - 01 Giugno 2013, 21:50:36
una cosina....
tutto funziona e è ok....
ma mi carica l'immagine un pò piccolina e io volevo ingrandirla un pò (diciamo Stretch ma quello fa troppo)
ora io ho uno spazio a disposizione abbastanza ampio (h=296,w=351) e vorrei occuparne il 70/80%
avevo provato con
Codice: gambas [Seleziona]

Dim i As New Image 
 Dim p As Picture   
 Dim pe, w, h As Float
  pe = 80
' carichiamo una immagine in una variabile di tipo "Image": 
   With i = i.Load(Application.Path & "/img/Loshu.gif") 
' Questo ci consente di applicarle la "semitrasparenza" 
' (ad esempio un valore a virgola mobile di 0,3): 
     .Opacity(0.3) 
     h = (pe / 100) * 296
     w = (pe / 100) * 352
     .Resize(w, h)
     .Stretch(w, h)
   End With   
   
    p = i.Picture

PictureBox2.Picture = p


peò così, oltre che non funziona, non mantiene le proporzioni dell'immagine....
se funzionasse....mantenere le proporzioni non sarebbe un problema...

ditemi dove sgaglio e più o meno cosa fare ;)
Titolo: Re: [risolto] immagine come "sfondo" al testo
Inserito da: vuott - 02 Giugno 2013, 00:38:49
ditemi dove sgaglio e più o meno cosa fare ;)

L'uso della funzione ".Resize()" consente, come dice la guida, di ridurre tagliando l'immagine. Essa, pertanto, con tale funzione non può essere né stirata né comunque ampliata.

Per ottenere l'ampliamento devi usare la funzione ".Stretch(w, h) As Image" che, appunto, ritorna un'immagine... ossia l'immagine stirata. Nel tuo codice non hai posto la variabile per raccogliere il ritorno di quell'immagine stirata !
Codice: gambas [Seleziona]

  i = .Stretch(w, h)
Titolo: Re: [risolto] immagine come "sfondo" al testo
Inserito da: simo97 - 02 Giugno 2013, 12:11:22
aaaa....
pensavo mi ridasse la stessa img....
ok....

in teoria io volevo prima ridimenzionare la nuova img con le misure giuste poi "Stretcharla" alle nuove dimenzioni....
 :2birre: