webForumDet fria alternativet

Bild från fil -> sluta läsa filen -> skriva över filen = funkar en gång? :S

.NET

0 svar · 710 visningar · startad av EndLessMind

Medlem sedan jan. 20102 inlägg
Frågan#1

Hej.
Jag håller på att utforma ett medlems register. Problemet ja har just nu är att om en medlem redan har en bild i programmet men vill byta så har ja 2 alternativ:
1. Bild från fil
2. Bild från webcamera.
Visst, det funkar utmärkt.
Men bara en gång. Vill ja sedan göra om detta på en annan medlem så måste jag starta om programet.
[ De hela funkar som så att bildens namn är desamma som medlemmens medlemsnummer, o då har ja lagt då att när texten ändrar sig i denna textbox så ska programmet kolla om där finns en fil med de namnet o i så fall ladda den.]
här e lite koder för formen som har hand om bilder från webbkameran


Public s As String = Form1.txtp.Text
Private Sub Formcam_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        s = Form1.txtp.Text
        Form1.txtp.Text = "123"
        Label1.Text = Form1.txtfm.Text & " " & Form1.txtem.Text
        LoadDeviceList()
        If lstDevices.Items.Count > 0 Then
            MenuItem2.Enabled = True
            lstDevices.SelectedIndex = 0
            MenuItem2.Enabled = True
        Else
            lstDevices.Items.Add("No Capture Device")
            MenuItem2.Enabled = False
        End If

        MenuItem3.Enabled = False
        MenuItem1.Enabled = False
        picCapture.SizeMode = PictureBoxSizeMode.StretchImage
    End Sub 

 Private Sub Formcam_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        Form1.txtp.Text = s
        s = ""
        Me.Dispose()

    End Sub

Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem1.Click

        Dim data As IDataObject
        Dim SAVE_PATH As String = Application.StartupPath & "\medlem"
        Dim FileDialog As New Formspara
        Dim fso = My.Computer.FileSystem
        SendMessage(hHwnd, WM_CAP_EDIT_COPY, 0, 0)
        data = Clipboard.GetDataObject()
        If data.GetDataPresent(GetType(System.Drawing.Bitmap)) Then
            bmap = CType(data.GetData(GetType(System.Drawing.Bitmap)), Image)
            picCapture.Image = bmap
            ClosePreviewWindow()
            MenuItem1.Enabled = False
            MenuItem3.Enabled = False
            MenuItem2.Enabled = True

                bmap.Save(SAVE_PATH & "\" & s & ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg)

            End If
            Dim pic1 As String = Application.StartupPath & "\medlem" & "\" & Form1.txtp.Text & ".jpg"
            Try
                If File.Exists(pic1) = True Then
                    Dim myimage As New Bitmap(pic1)
                    Form1.PictureBox1.Image = myimage
                    'Form1.txtp.Text = s
                ElseIf File.Exists(pic1) = False Then
                    Form1.PictureBox1.Image = My.Resources.siluett3
                End If
            Catch ex As Exception
                MsgBox(ex)
            End Try
        End If
    End Sub

o här lite kod för formen som visar registret

Public s As String
   Private Sub MenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem1.Click
        s = txtp.Text
        txtp.Text = "123"
        fromfile()
    End Sub

 Public Sub fromfile()
        Dim SAVE_PATH As String = Application.StartupPath & "\medlem"
        Dim FileDialog As New OpenFileDialog
        Dim fso = My.Computer.FileSystem
        'Dim s As String = txtp.Text
        'txtp.Text = "123"
        With FileDialog
            If Not fso.DirectoryExists(SAVE_PATH) Then
                Try
                    fso.CreateDirectory(SAVE_PATH)
                Catch ex As Exception
                    MessageBox.Show("Unable to create folder '" & SAVE_PATH.ToLower & _
                                    "'.  Images will be saved in '" & Application.StartupPath.ToLower & _
                                    "'.", Text, MessageBoxButtons.OK, MessageBoxIcon.Warning)
                    SAVE_PATH = Application.StartupPath
                End Try
            End If

            .InitialDirectory = SAVE_PATH
            .Filter = "All Graphic Files|*.bmp;*.gif;*.jpg;*.jpeg;*.png;|" & _
            "Graphic Interchange Format (*.gif)|*.gif|" & _
            "Portable Network Graphics (*.png)|*.png|" & _
            "JPEG File Interchange Format (*.jpg;*.jpeg)|*.jpg;*.jpeg|" & _
            "Windows Bitmap (*.bmp)|*.bmp"
            .FilterIndex = 1
            .FileName = ""
            'Label13.Text = Application.StartupPath & "\Saved\" & fso.GetName(.FileName)
            If .ShowDialog = Windows.Forms.DialogResult.OK Then
                If .FileName.ToUpper = (SAVE_PATH & "\" & fso.GetName(.FileName)).ToUpper Then
                    MessageBox.Show("The file '" & fso.GetName(.FileName).ToLower & "' cannot be copied onto itself.", _
                                    Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
                    Exit Sub
                ElseIf fso.FileExists(SAVE_PATH & "\" & fso.GetName(.FileName)) Then
                    Dim Response As DialogResult

                    Response = MessageBox.Show("The file '" & fso.GetName(.FileName).ToLower & "' already exist in the destination folder '" & _
                                               SAVE_PATH & "'" & vbCrLf & vbCrLf & "Do you want to overwite it?", Text, MessageBoxButtons.YesNo, _
                                               MessageBoxIcon.Question, MessageBoxDefaultButton.Button2)

                    If Response = Windows.Forms.DialogResult.No Then Exit Sub
                End If

                Try
                    fso.CopyFile(.FileName, SAVE_PATH & "\" & s & ".jpg", True)
                Catch ex As Exception
                    MessageBox.Show(ex.Message, Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
                End Try
            End If
        End With
        'Dim SAVE_pontus As String = Application.StartupPath & "\medlem" & "\" & TextBox1.Text & ".jpg"
        'Dim myImage As New Bitmap(SAVE_pontus)
        'PictureBox1.Image = myImage
        Dim pic As String = Application.StartupPath & "\medlem" & "\" & txtp.Text & ".jpg"
        Try
            If File.Exists(pic) = True Then
                Dim myimage As New Bitmap(pic)
                PictureBox1.Image = myimage
                'txtp.Text = s
            ElseIf File.Exists(pic) = False Then
                PictureBox1.Image = My.Resources.siluett3
            End If
        Catch ex As Exception
            MsgBox(ex)
        End Try
        txtp.Text = s
        s = ""
    End Sub

>>> Textboxen för medlemsnumret <<<
Private Sub TextBox11_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtp.TextChanged
        pic = Application.StartupPath & "\medlem" & "\" & txtp.Text & ".jpg"
        Try
            If File.Exists(pic) = True Then
                Dim myimage As New System.Drawing.Bitmap(pic)
                Dim img As Image = myimage
                PictureBox1.Image = img
            ElseIf File.Exists(pic) = False Then
                PictureBox1.Image = My.Resources.siluett3
            End If
        Catch ex As Exception
            MsgBox(ex)
        End Try
    End Sub

någon som har någon ide till varför de bara funkar en gång..

Edit: ja! Jag får 2 error som lyder:
1. När ja ska försöka ersätta en andra bild med bild från webbkameran så får jag: Ett allmänt fel uppstod i GDI+.

2. När jag försöker ersätta en andra bild med redan befintlig fil så får jag : Åtkomst nekad, Filen "sökväg" används av en annan prosess

nr 1 förstår ja inte så mkt av. gissar på att den är typ samma som nr 2.
men nr 2 borde inte ge error eftersom ja ändrar texten i textbox11 så hittar den ingen bild på de namnet o laddar då en bild från resources. så där borde inte var någon annan process som använder filen när ja ska ersätta den.

262 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)