VintaSoft Twain .NET SDK 15.4: Руководство для .NET разработчика
Vintasoft.WinTwain Namespace / ExtendedImageInfoCollection Class
Члены типа Объект Синтаксис Example Иерархия Требования Смотрите также
В этом разделе
Класс ExtendedImageInfoCollection
В этом разделе
Класс, позволяющий извлекать расширенную информацию о отсканированном изображении.
Объектная модель
ExtendedImageInfo ExtendedImageInfoCollection
Синтаксис
'Declaration

<DefaultMemberAttribute("Item")>
Public NotInheritable Class ExtendedImageInfoCollection
   Inherits System.Collections.CollectionBase

[DefaultMember("Item")]
public sealed class ExtendedImageInfoCollection : System.Collections.CollectionBase

Пример

Вот C#/VB.NET код, который демонстрирует, как получить расширенную информацию (номер документа, номер страницы, камеру, номер кадра, кадр, тип пикселя) о полученном изображении.


Partial Public Class How_to_get_extended_information_about_acquired_image
    Inherits Form

    ''' <summary>
    ''' TWAIN device manager.
    ''' </summary>
    Private _deviceManager As Vintasoft.Twain.DeviceManager



    Public Sub New()
        InitializeComponent()

        ' create and open device manager
        _deviceManager = New Vintasoft.Twain.DeviceManager(Me, Me.Handle)
        _deviceManager.Open()
    End Sub



    ''' <summary>
    ''' Acquire images asynchronously.
    ''' </summary>
    Public Sub AcquireImagesAsynchronously()
        Try
            ' get reference to the default device
            Dim device1 As Vintasoft.Twain.Device = _deviceManager.DefaultDevice

            ' subscribe to the device events
            AddHandler device1.ImageAcquired, New EventHandler(Of Vintasoft.Twain.ImageAcquiredEventArgs)(AddressOf device_ImageAcquired)
            AddHandler device1.ScanFinished, New EventHandler(AddressOf device_ScanFinished)

            ' set scanning settings
            device1.TransferMode = Vintasoft.Twain.TransferMode.Memory
            device1.ShowUI = False
            device1.DisableAfterAcquire = True

            ' open the device
            device1.Open()

            ' specify that extended information about acquired image is necessary
            device1.ExtendedImageInfo.Add(New Vintasoft.Twain.ExtendedImageInfo(Vintasoft.Twain.ExtendedImageInfoId.DocumentNumber))
            device1.ExtendedImageInfo.Add(New Vintasoft.Twain.ExtendedImageInfo(Vintasoft.Twain.ExtendedImageInfoId.PageNumber))
            device1.ExtendedImageInfo.Add(New Vintasoft.Twain.ExtendedImageInfo(Vintasoft.Twain.ExtendedImageInfoId.Camera))
            device1.ExtendedImageInfo.Add(New Vintasoft.Twain.ExtendedImageInfo(Vintasoft.Twain.ExtendedImageInfoId.FrameNumber))
            device1.ExtendedImageInfo.Add(New Vintasoft.Twain.ExtendedImageInfo(Vintasoft.Twain.ExtendedImageInfoId.Frame))
            device1.ExtendedImageInfo.Add(New Vintasoft.Twain.ExtendedImageInfo(Vintasoft.Twain.ExtendedImageInfoId.PixelFlavor))

            ' acquire images asynchronously
            device1.Acquire()
        Catch ex As Vintasoft.Twain.TwainException
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    ''' <summary>
    ''' Image is acquired.
    ''' </summary>
    Private Sub device_ImageAcquired(ByVal sender As Object, ByVal e As Vintasoft.Twain.ImageAcquiredEventArgs)
        ' output an extended information about the acquired image

        extendedImageInfoAboutAcquiredImageTextBox.Text += "IMAGE IS ACQUIRED" + Environment.NewLine
        extendedImageInfoAboutAcquiredImageTextBox.Text += Environment.NewLine

        Dim device As Vintasoft.Twain.Device = DirectCast(sender, Vintasoft.Twain.Device)
        For i As Integer = 0 To device.ExtendedImageInfo.Count - 1
            AddExtendedImageInfoToResultTextBox(i, device.ExtendedImageInfo(i))
        Next
        extendedImageInfoAboutAcquiredImageTextBox.Text += Environment.NewLine

        ' dispose the acquired image
        e.Image.Dispose()
    End Sub

    ''' <summary>
    ''' Add an extended image info to the result text box.
    ''' </summary>
    Private Sub AddExtendedImageInfoToResultTextBox(ByVal index As Integer, ByVal info As Vintasoft.Twain.ExtendedImageInfo)
        If Not info.IsValueValid Then
            Return
        End If

        extendedImageInfoAboutAcquiredImageTextBox.Text += String.Format("Extended image info {0}", index)
        extendedImageInfoAboutAcquiredImageTextBox.Text += Environment.NewLine

        extendedImageInfoAboutAcquiredImageTextBox.Text += String.Format("  Name={0}", [Enum].GetName(GetType(Vintasoft.Twain.ExtendedImageInfoId), info.InfoId))
        extendedImageInfoAboutAcquiredImageTextBox.Text += Environment.NewLine

        extendedImageInfoAboutAcquiredImageTextBox.Text += String.Format("  Id={0}", info.InfoId)
        extendedImageInfoAboutAcquiredImageTextBox.Text += Environment.NewLine

        extendedImageInfoAboutAcquiredImageTextBox.Text += String.Format("  Value type={0}", info.ValueType)
        extendedImageInfoAboutAcquiredImageTextBox.Text += Environment.NewLine

        Dim oneDeviceCapabilityValue As Vintasoft.Twain.TwainOneValueContainer = TryCast(info.Value, Vintasoft.Twain.TwainOneValueContainer)
        If oneDeviceCapabilityValue IsNot Nothing Then
            extendedImageInfoAboutAcquiredImageTextBox.Text += String.Format("  Value={0}", oneDeviceCapabilityValue.Value)
            extendedImageInfoAboutAcquiredImageTextBox.Text += Environment.NewLine
        Else
            Dim arrayDeviceCapabilityValue As Vintasoft.Twain.TwainArrayValueContainer = TryCast(info.Value, Vintasoft.Twain.TwainArrayValueContainer)
            If arrayDeviceCapabilityValue IsNot Nothing Then
                extendedImageInfoAboutAcquiredImageTextBox.Text += "Values: "
                If arrayDeviceCapabilityValue.Values.[GetType]() Is GetType(Byte()) Then
                    extendedImageInfoAboutAcquiredImageTextBox.Text += String.Format("byte[{0}]", arrayDeviceCapabilityValue.Values.Length)
                Else
                    For i As Integer = 0 To arrayDeviceCapabilityValue.Values.Length - 1
                        extendedImageInfoAboutAcquiredImageTextBox.Text += String.Format("{0}, ", arrayDeviceCapabilityValue.Values.GetValue(i))
                    Next
                End If
                extendedImageInfoAboutAcquiredImageTextBox.Text += Environment.NewLine
            End If
        End If
    End Sub

    ''' <summary>
    ''' Scan is finished.
    ''' </summary>
    Private Sub device_ScanFinished(ByVal sender As Object, ByVal e As EventArgs)
        Dim device1 As Vintasoft.Twain.Device = DirectCast(sender, Vintasoft.Twain.Device)

        ' unsubscribe from device events
        RemoveHandler device1.ImageAcquired, New EventHandler(Of Vintasoft.Twain.ImageAcquiredEventArgs)(AddressOf device_ImageAcquired)
        RemoveHandler device1.ScanFinished, New EventHandler(AddressOf device_ScanFinished)

        ' if device is not closed
        If device1.State <> Vintasoft.Twain.DeviceState.Closed Then
            ' close the device
            device1.Close()
        End If

        MessageBox.Show("Scan is finished.")
    End Sub

End Class


namespace TwainExamples_CSharp
{
    public partial class How_to_get_extended_information_about_acquired_image : System.Windows.Forms.Form
    {

        /// <summary>
        /// TWAIN device manager.
        /// </summary>
        Vintasoft.Twain.DeviceManager _deviceManager;



        public How_to_get_extended_information_about_acquired_image()
        {
            InitializeComponent();

            // create and open device manager
            _deviceManager = new Vintasoft.Twain.DeviceManager(this, this.Handle);
            _deviceManager.Open();
        }



        /// <summary>
        /// Acquire images asynchronously.
        /// </summary>
        public void AcquireImagesAsynchronously()
        {
            try
            {
                // get reference to the default device
                Vintasoft.Twain.Device device = _deviceManager.DefaultDevice;

                // subscribe to the device events
                device.ImageAcquired += new System.EventHandler<Vintasoft.Twain.ImageAcquiredEventArgs>(device_ImageAcquired);
                device.ScanFinished += new System.EventHandler(device_ScanFinished);

                // set scanning settings
                device.TransferMode = Vintasoft.Twain.TransferMode.Memory;
                device.ShowUI = false;
                device.DisableAfterAcquire = true;

                // open the device
                device.Open();

                // specify that extended information about acquired image is necessary
                device.ExtendedImageInfo.Add(new Vintasoft.Twain.ExtendedImageInfo(Vintasoft.Twain.ExtendedImageInfoId.DocumentNumber));
                device.ExtendedImageInfo.Add(new Vintasoft.Twain.ExtendedImageInfo(Vintasoft.Twain.ExtendedImageInfoId.PageNumber));
                device.ExtendedImageInfo.Add(new Vintasoft.Twain.ExtendedImageInfo(Vintasoft.Twain.ExtendedImageInfoId.Camera));
                device.ExtendedImageInfo.Add(new Vintasoft.Twain.ExtendedImageInfo(Vintasoft.Twain.ExtendedImageInfoId.FrameNumber));
                device.ExtendedImageInfo.Add(new Vintasoft.Twain.ExtendedImageInfo(Vintasoft.Twain.ExtendedImageInfoId.Frame));
                device.ExtendedImageInfo.Add(new Vintasoft.Twain.ExtendedImageInfo(Vintasoft.Twain.ExtendedImageInfoId.PixelFlavor));

                // acquire images asynchronously
                device.Acquire();
            }
            catch (Vintasoft.Twain.TwainException ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
            }
        }

        /// <summary>
        /// Image is acquired.
        /// </summary>
        private void device_ImageAcquired(object sender, Vintasoft.Twain.ImageAcquiredEventArgs e)
        {
            // output an extended information about the acquired image

            extendedImageInfoAboutAcquiredImageTextBox.Text += "IMAGE IS ACQUIRED" + System.Environment.NewLine;
            extendedImageInfoAboutAcquiredImageTextBox.Text += System.Environment.NewLine;

            Vintasoft.Twain.Device device = (Vintasoft.Twain.Device)sender;
            for (int i = 0; i < device.ExtendedImageInfo.Count; i++)
            {
                AddExtendedImageInfoToResultTextBox(i, device.ExtendedImageInfo[i]);
            }
            extendedImageInfoAboutAcquiredImageTextBox.Text += System.Environment.NewLine;

            // dispose the acquired image
            e.Image.Dispose();            
        }

        /// <summary>
        /// Add an extended image info to the result text box.
        /// </summary>
        private void AddExtendedImageInfoToResultTextBox(int index, Vintasoft.Twain.ExtendedImageInfo info)
        {
            if (!info.IsValueValid)
                return;

            extendedImageInfoAboutAcquiredImageTextBox.Text += string.Format("Extended image info {0}", index);
            extendedImageInfoAboutAcquiredImageTextBox.Text += System.Environment.NewLine;

            extendedImageInfoAboutAcquiredImageTextBox.Text += string.Format("  Name={0}", System.Enum.GetName(typeof(Vintasoft.Twain.ExtendedImageInfoId), info.InfoId));
            extendedImageInfoAboutAcquiredImageTextBox.Text += System.Environment.NewLine;

            extendedImageInfoAboutAcquiredImageTextBox.Text += string.Format("  Id={0}", info.InfoId);
            extendedImageInfoAboutAcquiredImageTextBox.Text += System.Environment.NewLine;

            extendedImageInfoAboutAcquiredImageTextBox.Text += string.Format("  Value type={0}", info.ValueType);
            extendedImageInfoAboutAcquiredImageTextBox.Text += System.Environment.NewLine;

            Vintasoft.Twain.TwainOneValueContainer oneDeviceCapabilityValue = info.Value as Vintasoft.Twain.TwainOneValueContainer;
            if (oneDeviceCapabilityValue != null)
            {
                extendedImageInfoAboutAcquiredImageTextBox.Text += string.Format("  Value={0}", oneDeviceCapabilityValue.Value);
                extendedImageInfoAboutAcquiredImageTextBox.Text += System.Environment.NewLine;
            }
            else
            {
                Vintasoft.Twain.TwainArrayValueContainer arrayDeviceCapabilityValue = info.Value as Vintasoft.Twain.TwainArrayValueContainer;
                if (arrayDeviceCapabilityValue != null)
                {
                    extendedImageInfoAboutAcquiredImageTextBox.Text += "Values: ";
                    if (arrayDeviceCapabilityValue.Values.GetType() == typeof(byte[]))
                    {
                        extendedImageInfoAboutAcquiredImageTextBox.Text += string.Format("byte[{0}]", arrayDeviceCapabilityValue.Values.Length);
                    }
                    else
                    {
                        for (int i = 0; i < arrayDeviceCapabilityValue.Values.Length; i++)
                            extendedImageInfoAboutAcquiredImageTextBox.Text += string.Format("{0}, ", arrayDeviceCapabilityValue.Values.GetValue(i));
                    }
                    extendedImageInfoAboutAcquiredImageTextBox.Text += System.Environment.NewLine;
                }
            }
        }
        
        /// <summary>
        /// Scan is finished.
        /// </summary>
        void device_ScanFinished(object sender, System.EventArgs e)
        {
            Vintasoft.Twain.Device device = (Vintasoft.Twain.Device)sender;

            // unsubscribe from device events
            device.ImageAcquired -= new System.EventHandler<Vintasoft.Twain.ImageAcquiredEventArgs>(device_ImageAcquired);
            device.ScanFinished -= new System.EventHandler(device_ScanFinished);

            // if device is not closed
            if (device.State != Vintasoft.Twain.DeviceState.Closed)
                // close the device
                device.Close();

            System.Windows.Forms.MessageBox.Show("Scan is finished.");
        }

    }
}

Иерархия наследования

System.Object
   System.Collections.CollectionBase
      Vintasoft.WinTwain.ExtendedImageInfoCollection

Требования

Целевые платформы: .NET 10; .NET 9; .NET 8; .NET 7; .NET 6; .NET Framework 4.8, 4.7, 4.6, 4.5, 4.0, 3.5

Смотрите также