Autore Topic: [Risolto]PictureBox riottosa  (Letto 1923 volte)

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 960
    • Mostra profilo
[Risolto]PictureBox riottosa
« il: 04 Novembre 2014, 17:42:07 »
Dopo la Gridview ci voleva anche la PictureBox... >:(
C'è una PictureBox vuota sul form, perchè questo semplice codice non mi fa vedere nulla?

Codice: [Seleziona]
' Gambas class file

Private imm As New Image
Private pic As New Picture

Public Sub FMain()
imm = Image.Load("/usr/share/icons/hicolor/512x512/apps/boincmgr.png")
pic = imm.Picture
With foto
   .W = imm.W
   .H = imm.H
   .Picture = pic
End With
End

Eppure è tutta roba che ho preso dalla Wiki...
Notare che anche facendo

Codice: [Seleziona]
.Picture = Picture.Load("/usr/share/icons/hicolor/512x512/apps/boincmgr.png")

Non cambia nulla. :-\
« Ultima modifica: 04 Novembre 2014, 20:57:49 da Top Fuel »
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: PictureBox riottosa
« Risposta #1 il: 04 Novembre 2014, 19:09:04 »
Ho fatto qualche prova ed ho notato che l'istruzione di caricamento della picture, inserita nella Sub FMain non produce effetti, mentre, se la inserisci nella Sub _new, oppure nella Sub Mouse_down produce effetti diversi. Infatti, se posta nella Sub _new, l'immagine compare subito con l'apertura della Form. Se invece la inserisci nella  Sub Mouse_down  l'immagine viene mostrata non appena clicchi sul mouse, quando il cursore è posizionato sulla pictureBox.
Le mie istruzioni di prova sono semplicemente le seguenti:
 
Codice: [Seleziona]
Public Sub foto_MouseDown()
   With foto
      .Picture = Picture.Load(user.home & "/mont/dativari/Gambas3/Gambas3_Progetti/Gambas_progetti.miei/TestDbContabFam/che-faccio_64.png")
   End With
End

Un'altra cosa che ho notato è che l'immagine, posta fuori dalla directory che contiene il programma utente, non viene caricata. Ho anche provato a richiamarla dentro la pictureBox, in fase di creazione e mi veniva prodotto un errore sulla proprietà picture, ponendola invece, come ho detto prima nella directory di residenza del programma, veniva caricata ancora una volta senza intoppi.
Spero di essersi stato utile.
 :ciao:
:ciao:

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.292
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: PictureBox riottosa
« Risposta #2 il: 04 Novembre 2014, 20:41:43 »
A mio avviso, la riga
  
Codice: gambas [Seleziona]
Public Sub FMain()

stando così posta, non mi pare nient'altro che l'inizio di una sub-routine/procedura, che nel codice da te mostrato non viene invocata da nessuna funzione chiamante.

Otterrai il risultato cercato se imposti come suggerito da Picavbg, oppure ovviamente così:
Codice: gambas [Seleziona]
Private imm As Image
Private pic As Picture

Public Sub Form_Open()
  
   FMain()
  
End



Public Sub FMain()

imm = Image.Load("/usr/share/icons/hicolor/512x512/apps/boincmgr.png")

pic = imm.Picture
With foto
   .W = imm.W
   .H = imm.H
   .Picture = pic
End With

End



o, meglio:
Codice: gambas [Seleziona]
Private imm As Image
Private pic As Picture

Public Sub Form_Open()
  
imm = Image.Load("/usr/share/icons/hicolor/512x512/apps/boincmgr.png")

pic = imm.Picture
With foto
   .W = imm.W
   .H = imm.H
   .Picture = pic
End With

End





Eppure è tutta roba che ho preso dalla Wiki...
Puoi indicare l'indirizzo della pagina ?
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 960
    • Mostra profilo
Re: PictureBox riottosa
« Risposta #3 il: 04 Novembre 2014, 20:57:27 »
Avevate ragione, ora funziona. :-[
Puoi indicare l'indirizzo della pagina ?

Erano cose che ho letto nel paragrafo della gestione delle immagini, ma non avevo fatto caso che erano inserite in Form_Open.
Risolto, si può chiudere. :)
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 960
    • Mostra profilo
Re: PictureBox riottosa
« Risposta #4 il: 04 Novembre 2014, 20:59:42 »
Un'altra cosa che ho notato è che l'immagine, posta fuori dalla directory che contiene il programma utente, non viene caricata. Ho anche provato a richiamarla dentro la pictureBox, in fase di creazione e mi veniva prodotto un errore sulla proprietà picture, ponendola invece, come ho detto prima nella directory di residenza del programma, veniva caricata ancora una volta senza intoppi.

A me l'ha caricata pur essendo addirittura fuori dalla Home. :-\
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.292
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: PictureBox riottosa
« Risposta #5 il: 04 Novembre 2014, 22:29:02 »
.....ma non avevo fatto caso che erano inserite in Form_Open.

 :violent:
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 960
    • Mostra profilo
Re: [Risolto]PictureBox riottosa
« Risposta #6 il: 04 Novembre 2014, 22:39:08 »
Su, dai, dimmelo: ;D

Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 960
    • Mostra profilo
Re: [Risolto]PictureBox riottosa
« Risposta #7 il: 05 Novembre 2014, 13:47:05 »
Continuo questa discussione per spiegare a cosa servivano quelle linee di codice la sopra.
E' un piccolo esperimento che stavo facendo usando i puntatori e gli stream in memoria che Vuott aveva spiegato a Gianluigi.
Cioè questo:

Codice: [Seleziona]
' Gambas class file

Private imm As Image
Private pic As Picture

Public Sub Form_Open()
Dim punta As Pointer, flusso As Stream
Dim i, dato As Byte, grandezza, j As Integer
imm = Image.Load("/usr/share/icons/hicolor/512x512/apps/boincmgr.png")
pic = imm.Picture
With foto
   .W = imm.W
   .H = imm.H
   .Picture = pic
End With
punta = Object.Address(imm)
Print punta
grandezza = Object.SizeOf(imm)
Print grandezza
flusso = Memory punta For Read Write
Do
   For j = 0 To grandezza - 1
      Read #flusso, dato
      For i = 1 To 8
         dato = Ror(dato, 1)
         Seek #flusso, j
         Write #flusso, dato As Byte
      Next
   Next
   pic = imm.Picture
   foto.Picture = pic
   Sleep 0.2
Loop
End

Volevo manipolare byte per byte una Image per vedere se si riusciva a ottenere qualche effettino particolare (Ror è solo un esempio) ma ci sono 2 problemi: il primo è che pur essendo l'immagine che uso grande 291 kb Object.SizeOf mi restituisce solo 64 byte, ma la cosa peggiore è che il programma va immediatamente in Errore 11...
Capita anche a voi?
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.292
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: [Risolto]PictureBox riottosa
« Risposta #8 il: 05 Novembre 2014, 17:19:41 »
....ma ci sono 2 problemi:...
Capita anche a voi?
Suggerirei, innanzitutto, di prendere bene visione del 2° paragrafo di questa pagina che ho scritto nella WIKI:
http://www.gambas-it.org/wiki/index.php?title=Individuare_i_colori_dei_pixel_di_una_immagine



 
Codice: gambas [Seleziona]
punta = Object.Address(imm)

Per ottenere il Puntatore ai dati caricati in una variabile di tipo Image, è necessario, e ben più agevole, utilizzare la proprietà .Data della Classe Image .


Codice: gambas [Seleziona]
grandezza = Object.SizeOf(imm)
Per poter maneggiare i pixel devi operare sui byte che compongono i pixel medesimi.
Un file immagine, anche se non compresso, non contiene i soli byte puri dei pixel. Se, poi, è compresso, non puoi ricavare la dimensione dell'immagine dal suo file immagine. Sei costretto ad utilizzare, anche questa volta, le risorse della Classe Image di Gambas.
Pertanto, la dimensione in byte effettiva di un'immagine si ottiene moltiplicando i pixel per la quantità di byte che compongono un singolo pixel:
Codice: gambas [Seleziona]
grandezza = imm.Width * imm.Height * len(imm.Format)

L'istruzione len(imm.Format) è semplicemente un mio stratagemma per impostare il formato dei pixel (la quantità di byte che compongono un singolo pixel).
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 960
    • Mostra profilo
Re: [Risolto]PictureBox riottosa
« Risposta #9 il: 05 Novembre 2014, 17:27:47 »
Quella pagina non l'avevo ancora letta. :-[
Ho capito, modificherò secondo i tuoi suggerimenti.
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.158
  • Tonno verde
    • Mostra profilo
Re: [Risolto]PictureBox riottosa
« Risposta #10 il: 05 Novembre 2014, 18:26:21 »
E' un piccolo esperimento che stavo facendo usando i puntatori e gli stream...
Volevo manipolare byte per byte una Image...

miiiiih che ppaura!
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 960
    • Mostra profilo
Re: [Risolto]PictureBox riottosa
« Risposta #11 il: 05 Novembre 2014, 22:51:00 »
Ho modificato il programma ed in effetti ora funziona, ha un effetto "caleidoscopico" sull'immagine:
Codice: [Seleziona]
' Gambas class file

Private imm As Image

Public Sub Form_Open()
Dim i As Byte
imm = Image.Load("/usr/share/icons/hicolor/128x128/apps/vlc.png")
With foto
   .W = imm.W
   .H = imm.H
   .Picture = imm.Picture
End With
Sleep 1
shifta
foto.Picture = imm.Picture
Sleep 2
shifta
foto.Picture = imm.Picture
End

Public Sub shifta()
Dim flusso As Stream
Dim fo, dato As Byte, j, grandezza As Integer
fo = Len(imm.Format)
flusso = Memory imm.Data For Read Write
grandezza = (imm.H * imm.W * fo) - 1
For j = 0 To grandezza
   Read #flusso, dato
   dato = Rol(dato, 1)
   Seek #flusso, j
   Write #flusso, dato As Byte
Next
End
Ma a parte una certa lentezza di calcolo, sopratutto se l'immagine è grande, nell'esempio qui sopra avrebbe dovuto farmi vedere prima l'immagine originale, poi 2 immagini modificate. Invece mi fa vedere solo l'ultima. Devo capire perchè... :-\
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: [Risolto]PictureBox riottosa
« Risposta #12 il: 06 Novembre 2014, 00:17:42 »
prova ad aggiungere una Wait 0.05 o simili ogni volta che mostri una nuova immagini
 :ciao:
:ciao:

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 960
    • Mostra profilo
Re: [Risolto]PictureBox riottosa
« Risposta #13 il: 06 Novembre 2014, 11:57:22 »
Fatto. Nessun risultato.
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.158
  • Tonno verde
    • Mostra profilo
Re: [Risolto]PictureBox riottosa
« Risposta #14 il: 06 Novembre 2014, 14:15:21 »
Fatto. Nessun risultato.

Premetto che non ho avuto tempo di provare il tuo codice (la prova è solo rimandata per colpa del momento :)).
Ma così a sensazione se vuoi vedere cosa succede ti conviene comandare shifta() da pulsante.

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro