File overschrijven

Status
Niet open voor verdere reacties.

tierens

Gebruiker
Lid geworden
2 feb 2012
Berichten
37
Hoi specialisten

Met onderstaande code maak ik een datagridview met een imagekolom waar ik fotos inplaats, indien ze aanwezig zijn.
Bij dubbelklikken op een imagevak kan je browsen naar een jpg en plaatst die nadat hij de afmetingen heeft aangepast.

Werkt goed maar er is een probleem als er al een foto (jpg) aanwezig is.
Dan zou moet hij de bestaande jpg file moeten overschrijven.
Maar omdat deze in gebruik is (denk ik), krijg ik er een foutmelding op! (melding= "Er is een algemene fout opgetreden in GDI+.")

Waar is het jpg bestand dan nog bezet? :confused:

Code:
Public Class Invoer_Klassen
    Dim Path As String = Application.StartupPath() 
    Dim x, y As Integer 
    Dim root As String 

      Private Sub Invoer_Klassen_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
         DataGridView1.RowCount = 20
        For ln = 1 To 20
            DataGridView1.Rows(ln - 1).Height = 65
            If File.Exists(Path & "\klas" & k & ln & ".jpg") Then
                DataGridView1.Item(2, ln - 1).Value = Image.FromFile(Path & "\klas" & k & ln & ".jpg")
            End If
        Next
    End Sub

    Private Sub DataGridView1_CellDoubleClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellDoubleClick
        x = e.RowIndex
        y = e.ColumnIndex
        If y = 2 Then
            OpenFileDialog1.ShowDialog()
        End If
    End Sub

    Private Sub OpenFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog1.FileOk
        root = Path & "\klas" & k & x + 1 & ".JPG"
        If OpenFileDialog1.FileName = root Then
            MessageBox.Show("Zelfde foto!")
            Exit Sub
        End If
        Dim b, h As Integer
        Dim img As Image = Image.FromFile(OpenFileDialog1.FileName)
        b = img.Width / img.Height * 65
        h = 65
        Dim bmp As Bitmap = New Bitmap(b, h)
        Using g As Graphics = Graphics.FromImage(bmp)
            g.DrawImage(img, 0, 0, bmp.Width, bmp.Height)
        End Using
        DataGridView1.Item(2, x).Value = bmp
        bmp.Save(root, System.Drawing.Imaging.ImageFormat.Jpeg)
     End Sub

End Class

Dank bij voorbaat!
 
Laatst bewerkt:
Probeer dit
De image grote zet je door middel van twee textboxen of met een getal als je een vaste afmeting wil.

Code:
  Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        If Me.PictureBindingSource.Position > -1 Then
            Try
                Dim resizeImg, origImg As Image

                'Get the current row
                Dim row As PictureDemoDataSet.PictureRow
                row = CType(CType(Me.PictureBindingSource.Current, DataRowView).Row, PictureDemoDataSet.PictureRow)

                'Convert byte array to image
                Using ms As New System.IO.MemoryStream(row.Picture)
                    origImg = Image.FromStream(ms)

                    Dim width As Integer = CInt(Me.[COLOR="#008000"]ResizeWidthTextbox.Text[/COLOR])
                    Dim height As Integer = CInt(Me.[COLOR="#008000"]ResizeHeightTextbox.Text[/COLOR])

                    'Resize image
                    resizeImg = origImg.GetThumbnailImage(width, height, Nothing, Nothing)

                    Me.PictureBox1.Image = resizeImg
                End Using

            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
        End If
    End Sub
 
Op welke regel code wordt de foutmelding geworpen?
 
Op welke regel code wordt de foutmelding geworpen?

Op : bmp.Save(root, System.Drawing.Imaging.ImageFormat.Jpeg)
foutmelding: Er is een algemene fout opgetreden in GDI+.
 
Laatst bewerkt:
Probeer dit
De image grote zet je door middel van twee textboxen of met een getal als je een vaste afmeting wil.

Code:
  Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        If Me.PictureBindingSource.Position > -1 Then
            Try
                Dim resizeImg, origImg As Image

                'Get the current row
                Dim row As PictureDemoDataSet.PictureRow
                row = CType(CType(Me.PictureBindingSource.Current, DataRowView).Row, PictureDemoDataSet.PictureRow)

                'Convert byte array to image
                Using ms As New System.IO.MemoryStream(row.Picture)
                    origImg = Image.FromStream(ms)

                    Dim width As Integer = CInt(Me.[COLOR="#008000"]ResizeWidthTextbox.Text[/COLOR])
                    Dim height As Integer = CInt(Me.[COLOR="#008000"]ResizeHeightTextbox.Text[/COLOR])

                    'Resize image
                    resizeImg = origImg.GetThumbnailImage(width, height, Nothing, Nothing)

                    Me.PictureBox1.Image = resizeImg
                End Using

            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
        End If
    End Sub

Deze code krijg ik niet aan de praat, nog wat moeilijk voor mij, ik ken nog niet veel van classen... :confused:
Een aantal functies staan error onderlijnd:
Knipsel.JPG
 
Laatst bewerkt:
Eigenlijk om het probleem kort samen te vatten zie volgende code:
Code:
  DataGridView1.Item(2, 0).Value = Image.FromFile("test.jpg")
        My.Computer.FileSystem.DeleteFile("test.jpg")
Hier krijg ik de foutcode (op de laatste regel):
Kan geen toegang krijgen tot het bestand D:.......JPG omdat het wordt gebruikt door een ander proces.

De jpg file blijft dus bezet na het invullen van het datagridview en zelfs met de volgende code:
Code:
        Dim foto As Image
        foto = Image.FromFile("test.jpg")
        DataGridView1.Item(2, 0).Value = foto
        My.Computer.FileSystem.DeleteFile("test.jpg")
Hoe kan ik die jpg file loskoppelen van de extentie?
 
Oplossing! :thumb:

Met
Code:
    ........    .Dispose()
maak je de jpg los.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan