如何从Picturebox中保存从相机加载的图像?

我创建了一个简单的程序,可以从相机获取图像并将其使用Aforge库显示在图片框中。但是,当我尝试从图片框中保存图像时。它会在System.Drawing.dll中提示类似“ System.Runtime.InteropServices.ExternalException”的错误。GDI+中发生了一般性错误。

我做了一些研究,但没有找到任何有用的解决方案。

下面是我用来保存图像的以下代码:

Private Sub Button2_Click(sender As Object,e As EventArgs) Handles Button2.Click

        PictureBox1.Image.Save("C:\a.jpeg",ImageFormat.Jpeg)

End Sub

更新的代码:

Imports AForge
Imports AForge.Video
Imports AForge.Video.DirectShow
Imports AForge.Imaging.Filters
Imports AForge.Imaging
Imports System.Drawing.Imaging

Public Class Form1

    Dim Filter As FilterInfoCollection
    Dim Camera As VideoCaptureDevice


    Dim MINR As Integer = 0
    Dim MING As Integer = 0
    Dim MINB As Integer = 0
    Dim MAXR As Integer = 255
    Dim MAXG As Integer = 255
    Dim MAXB As Integer = 255

    Private Sub Form1_Load(sender As System.Object,e As System.EventArgs) Handles MyBase.Load

        Filter = New FilterInfoCollection(FilterCategory.VideoInputDevice)
        If Filter.Count > 0 Then
            For Each ITEM In Filter
                ComboBox1.Items.Add(ITEM.Name.ToString())
            Next

            CheckForIllegalCrossThreadCalls = False

            Me.Location = New System.Drawing.Point(Me.Location.X,0)
        Else
            MsgBox("NO Camera Found")
        End If
    End Sub

    Private Sub ComboBox1_SelectedIndexChanged(sender As System.Object,e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged

        Camera = New VideoCaptureDevice(Filter(ComboBox1.SelectedIndex).monikerString)
        AddHandler Camera.NewFrame,New NewFrameEventHandler(AddressOf Video_NewFrame)
        Camera.Start()
        ComboBox1.Visible = False
    End Sub

    Private Sub Video_NewFrame(sender As Object,eventArgs As AForge.Video.NewFrameEventArgs)

        Dim ORIGINAL As Bitmap = DirectCast(eventArgs.Frame.Clone(),Bitmap)
        Dim FILTER As Bitmap = DirectCast(eventArgs.Frame.Clone(),Bitmap)


        Dim CFILTER As New ColorFiltering
        CFILTER.Red = New IntRange(MINR,MAXR)
        CFILTER.Green = New IntRange(MING,MAXG)
        CFILTER.Blue = New IntRange(MINB,MAXB)
        CFILTER.ApplyInPlace(FILTER)


        Dim GRAY As Grayscale = Grayscale.CommonAlgorithms.BT709
        Dim IMAGING As Bitmap = GRAY.Apply(FILTER)


        Dim BLOBS As New BlobCounter()
        BLOBS.MinHeight = 10
        BLOBS.MinWidth = 10
        BLOBS.Objectsorder = Objectsorder.Size
        BLOBS.ProcessImage(IMAGING)

        Dim Rectangle As Rectangle() = BLOBS.GetObjectsrectangles()
        If Rectangle.Count > 0 Then
            Dim Rectangle2 As Rectangle = Rectangle(0)
            Dim STYLE As Graphics = Graphics.FromImage(ORIGINAL)
            Dim CLR As New Pen(Color.Lime,5)
            STYLE.DrawRectangle(CLR,Rectangle2)
            STYLE.Dispose()
        End If

        PictureBoxDefault.Image = ORIGINAL '
        PictureBoxFilter.Image = FILTER
    End Sub


    Private Sub TrackBarMINR_Scroll(sender As System.Object,e As System.EventArgs) Handles TrackBarMINR.Scroll
        MINR = TrackBarMINR.Value
        LabelMINR.Text = "MINR: " & MINR
    End Sub

    Private Sub TrackBarMING_Scroll(sender As System.Object,e As System.EventArgs) Handles TrackBarMING.Scroll
        MING = TrackBarMING.Value
        LabelMING.Text = "MING: " & MING
    End Sub

    Private Sub TrackBarMINB_Scroll(sender As System.Object,e As System.EventArgs) Handles TrackBarMINB.Scroll
        MINB = TrackBarMINB.Value
        LabelMINB.Text = "MINB: " & MINB
    End Sub

    Private Sub TrackBarMAXR_Scroll(sender As System.Object,e As System.EventArgs) Handles TrackBarMAXR.Scroll
        MAXR = TrackBarMAXR.Value
        LabelMAXR.Text = "MAXR: " & MAXR
    End Sub

    Private Sub TrackBarMAXG_Scroll(sender As System.Object,e As System.EventArgs) Handles TrackBarMAXG.Scroll
        MAXG = TrackBarMAXG.Value
        LabelMAXG.Text = "MAXG: " & MAXG
    End Sub

    Private Sub TrackBarMAXB_Scroll(sender As System.Object,e As System.EventArgs) Handles TrackBarMAXB.Scroll
        MAXB = TrackBarMAXB.Value
        LabelMAXB.Text = "MAXB: " & MAXB
    End Sub

    Private Sub Form1_FormClosing(sender As Object,e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        Try
            Camera.SignalToStop()
        Catch ex As Exception
        End Try
    End Sub

    Private Sub Button2_Click(sender As Object,e As EventArgs) Handles btnSave.Click

        PictureBox1.Image.Save("D:\a.png",ImageFormat.Png)

    End Sub


End Class
abliz13 回答:如何从Picturebox中保存从相机加载的图像?

我有同样的问题。 下面的代码现在对我有用。

Private Sub Button2_Click(sender As Object,e As EventArgs) Handles Button2.Click
    Dim img As Bitmap = PictureBox1.Image.Clone
    img.Save("Z:\test.bmp",System.Drawing.Imaging.ImageFormat.Bmp)
End Sub

只需将“ Z:\ test.bmp”更改为您的目录,就没有尝试任何其他图像格式,但这是迄今为止我使它起作用的唯一方法。

本文链接:https://www.f2er.com/2748400.html

大家都在问