Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    278

    [VB.NET] come inserire un ciclo in questo programma

    ciao ragazzi ho fatto il mio programmino che prende un'immagine, la ridimensiona in base a un coefficente dato nella textbox e poi salva l'immagine.
    ora però ho un problema,io vorrei che selezionando più foto dalla mia openfiledialog l'operazione avvenisse per tutte le foto selezionate...ho subito pensato ad un ciclo di for, ma non riesco bene a capire dove e come inserirlo...mi potete aiutare???la funziona multiselect di openfiledialog l'ho già attivata.


    Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    'apri file, open file
    If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
    PictureBox1.Image = Image.FromFile(OpenFileDialog1.FileName)


    End If

    Label1.Text = "altezza immagine " & PictureBox1.Image.Height & " " & vbCrLf & "larghezza immagine" & PictureBox1.Image.Width & ""

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    'salvataggio, 'save
    If SaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then

    PictureBox1.Image.Save(SaveFileDialog1.FileName)
    End If
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    'ridimensionamento, resize
    Dim i
    i = TextBox1.Text

    Dim ReBMP As New Bitmap(PictureBox1.Image, PictureBox1.Image.Width * i, PictureBox1.Image.Height * i)
    PictureBox1.Image = ReBMP
    Label1.Text = "altezza immagine " & PictureBox1.Image.Height & " " & vbCrLf & "larghezza immagine" & PictureBox1.Image.Width & ""
    End Sub




    grazie.

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Non sono certo di aver compreso il problema al 100%, ma se si tratta di compiere un'operazione specifica su tutti i file selezionati attraverso OpenFileDialog e la difficoltà ricade proprio nella scansione di tali file, il problema può essere risolto strutturando il codice in un modo simile al seguente:

    codice:
        Private Sub ExecuteButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ExecuteButton.Click
    
            ' Visualizza la finestra di dialogo per la selezione delle foto
            If (PhotoOpenFileDialog.ShowDialog = Windows.Forms.DialogResult.OK) Then
    
                ' Effettua la scansione di tutti i file selezionati
                For Each PhotoFileName As String In PhotoOpenFileDialog.FileNames
    
                    ' Carico la foto nel controllo PictureBox
                    PhotoPictureBox.Image = Image.FromFile(PhotoFileName)
    
                    ' ... altre operazioni ...
    
                Next
    
            End If
    
        End Sub
    dove PhotoOpenFileDialog è il nome del componente OpenFileDialog per la selezione dei file e PhotoPictureBox è il controllo PictureBox dove vengono visualizzate.

    Si tratta solo di un esempio, ovviamente. Tant'è che probabilmente, se il tuo scopo risiede nella necessità di elaborare delle immagini, il loro caricamento ciclico all'interno di una PictureBox è probabilmente uno step inutile, poiché potresti lavorare direttamente con le classi e i metodi forniti dalla libreria base (FCL) senza dover "tirare in ballo" un controllo visuale.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    278
    ok centrato in pieno il mio problema, e sei stato chiarissimo.....miiiillleeee grazie!!!

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    278
    l'ho messo giù così:

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
    If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
    For Each filename As String In OpenFileDialog1.FileNames
    PictureBox1.Image = Image.FromFile(filename)
    Label1.Text = filename
    Dim i
    i = TextBox1.Text

    Dim ReBMP As New Bitmap(PictureBox1.Image, PictureBox1.Image.Width * i, PictureBox1.Image.Height * i)
    PictureBox1.Image = ReBMP

    PictureBox1.Image.Save(filename)
    Next


    End If
    End Sub


    che ne dite???mi dà un problema però quando salvo mi dà errore generico gdi+ in picturebox1.image.save(filename)...come mai secondo voi??ho provato con la savedialogbox e funziona..ma per una serie di file vorrei che sovrascrivesse automaticamente le immagine vecchie con quelle nuove...grazie ciao

  5. #5
    Originariamente inviato da alka
    Se il tuo scopo risiede nella necessità di elaborare delle immagini, il loro caricamento ciclico all'interno di una PictureBox è probabilmente uno step inutile, poiché potresti lavorare direttamente con le classi e i metodi forniti dalla libreria base (FCL) senza dover "tirare in ballo" un controllo visuale.
    Se non ti serve effettivamente caricarlo nel PictureBox salva l'immagine usando direttamente il metodo ReBMP.Save(); secondo me l'errore infatti è dato dal fatto che pur passando all'istruzione successiva l'immagine non è ancora stata caricata nel PictureBox, per cui la chiamata al metodo Save ti dà un errore.
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    278
    no guarda non penso che sia quello perche se invece utilizzo per salvare la savefiledialog, non dà problemi di nessun tipo, solo che per ogni file mi chiede di dargli un nome al file e poi di sovrascrirlo ed è un po' noioso dover farlo per 10 o 20 file.

  7. #7
    Tu prova... il dialog secondo me introduce un breve ritardo che consente al controllo PictureBox di finire di caricare l'immagine... e comunque il caricamento dell'immagine nel controllo è comunque uno spreco di tempo che va comunque evitato.
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    278
    no non è quello...il tempo non è , ho provato ad introdurgli un form in maniera da dargli tempo di caricare l'immagine e poi dargli la conferma...tuttavia non cambia nulla...con quel comando non va...picturebox1.save......non va...il metodo che mi dici tu rebmp.save....non lo conosco..sono un po' un novellino di vb.net05...ed in rete non si trova molto a riguardo...anzi non ho trovato nulla...

  9. #9
    codice:
    ReBMP.Save("filedioutput.estensione",ImageFormat.Formato)
    Dove "Formato" può essere Bmp, Emf, Exif, Gif, Icon, Jpeg, MemoryBmp, Png, Tiff, Wmf e dove filedioutput.estensione è il nome con cui vuoi salvare l'immagine.
    Esempio:
    codice:
    ReBMP.Save("prova.jpg",ImageFormat.Jpeg)
    .
    P.S.: non riesco a capacitarmi del fatto che tu non abbia trovato nulla in rete circa il metodo Image.Save...
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    278
    no scusa ti spiego cerca con google ReBMP.save....e vedi ceh non trovi nulla....io credevo chissà cosa fosse....invece.....se ci fai caso...


    PictureBox1.Image = ReBMP


    poi

    PictureBox1.Image.Save(filename)

    quindi ReBMP.save(filename) che è la stessa cosa...

    dovesse essere diverso l'ho già fatto come mi hai detto tu, ma già in precedenza avevo provato...ed è uguale stessa cosa...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.