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

问题描述 投票:3回答:1

我创建了一个简单的程序,可以从相机获取图像并将其使用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

我创建了一个简单的程序,可以从相机获取图像并将其使用Aforge库显示在图片框中。但是,当我尝试从图片框中保存图像时。它会提示这样的错误“'...

vb.net aforge
1个回答
0
投票

我有同样的问题。下面的代码现在对我有用,非常慢。我仍在考虑加快速度。我会在更新速度更快时发布更新。

© www.soinside.com 2019 - 2024. All rights reserved.