VintaSoft Imaging .NET SDK 15.1: Документация для .NET разработчика
Vintasoft.Imaging Namespace / ImageCollection Class / SaveAsync Methods / SaveAsync(Stream,EncoderBase) Method
Синтаксис Exceptions Ремарки Example Требования Смотрите также
В этом разделе
SaveAsync(Stream,EncoderBase) Метод (ImageCollection)
В этом разделе
Асинхронно сохраняет все изображения из этой коллекции в указанный поток, используя указанный EncoderBase.
Синтаксис
'Declaration

Public Overloads Sub SaveAsync( _
ByVal stream
Поток, в котором должна быть сохранена коллекция изображений.
As System.IO.Stream, _
ByVal encoder
Кодировщик для сохранения изображений.
As Vintasoft.Imaging.Codecs.Encoders.EncoderBase _
)

Parameters

stream
Поток, в котором должна быть сохранена коллекция изображений.
encoder
Кодировщик для сохранения изображений.
Исключения
ИсключениеОписание
Выбрасывается, если stream равен null.
Выбрасывается, если коллекция изображений не содержит изображений или в данный момент выполняется другой процесс сохранения.
Выбрасывается, если при сохранении изображения произошла ошибка.
Ремарки

Этот метод работает асинхронно, т. е. для сохранения изображений создается отдельный поток.

Поддерживаемые форматы изображений: JBIG2, PDF, TIFF.

Этот метод

  • сохраняет изображения в поток, указанный stream, с помощью encoder
  • stream перезаписывается, если он не пустой
  • процесс сохранения может быть отменен, сохранение изображений может быть подавлено
  • источники изображений в коллекции изображений не изменяются, т. е. images[i].SourceInfo.Stream не изменяется
если
  • stream != images[0]..SourceInfo.Stream
  • SaveAndSwitchSource имеет значение false
  • encoder.CreateNewFile имеет значение true

Этот метод
  • добавляет изображения в существующий поток, указанный stream, с помощью encoder
  • процесс сохранения можно отменить, сохранение изображений можно подавить
  • источники изображений в коллекции изображений не изменяются, т. е. images[i].SourceInfo.Stream не изменяется
если
  • stream != images[0]..SourceInfo.Stream
  • SaveAndSwitchSource имеет значение false
  • encoder. CreateNewFile имеет значение false

Этот метод
  • сохраняет изображения в новый поток, указанный в stream, с помощью encoder
  • stream перезаписывается, если не пусто
  • процесс сохранения не может быть отменен, сохранение изображений не может быть подавлено
  • изменяются источники изображений в коллекции изображений, т.е. images[i].SourceInfo.Stream заменяется на stream
, если
Это метод
  • меняет изображения в исходном потоке, если некоторые изображения исходного файла изменены в коллекции изображений.
  • удаляет изображения из исходного потока, если некоторые изображения исходного файла удалены из коллекции изображений.
  • добавляет изображения в исходный поток, если в коллекцию изображений добавлены некоторые изображения NOT из исходного файла.
  • переиндексирует изображения в исходном потоке, если изображения переиндексированы в коллекции изображений
  • процесс сохранения не может быть отменен, сохранение изображений не может быть подавлено
  • изменяются источники изображений в коллекции изображений, т.е. images[i].SourceInfo. Поток меняется на stream
, если
Этот метод
  • выдать исключение
if
ImageSaving событие произойдет перед сохранением каждого изображения. В этом событии вы можете получить информацию об изображении, запретить сохранение изображения или отменить процесс сохранения изображения. Событие ImageSaved произойдет после сохранения каждого изображения. В этом событии вы можете получить информацию о ходе процесса сохранения изображений или отменить процесс сохранения изображений.

Пример

Этот пример показывает, как сохранить коллекцию изображений асинхронно.


''' <summary>
''' Indicates whether image collection saving process is finished.
''' </summary>
Private _isImagesSavingProcessFinished As Boolean = False



''' <summary>
''' Example of ImageCollection.SaveAsync.
''' </summary>
Public Sub ImageCollectionSaveAsyncExample()
    ' create image collection
    Dim images As New Vintasoft.Imaging.ImageCollection()

    ' add several images into collection
    ' [ do not forget to set your image file paths here! ]
    images.Add("testImage1.jpg")
    images.Add("testImage2.bmp")
    images.Add("testImage3.png")

    ' create FileStream for saving
    Dim saveStream As New System.IO.FileStream("new-file-name.tif", System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.ReadWrite)

    ' create the TiffEncoder instance
    Dim multipageEncoder As Vintasoft.Imaging.Codecs.Encoders.MultipageEncoderBase = New Vintasoft.Imaging.Codecs.Encoders.TiffEncoder()

    ' subscribe to the image collection events
    AddHandler images.ImageCollectionSaving, New System.EventHandler(Of Vintasoft.Imaging.ImageCollectionSavingEventArgs)(AddressOf images_ImageCollectionSaving)
    AddHandler images.ImageCollectionSaved, New System.EventHandler(AddressOf images_ImageCollectionSaved)
    AddHandler images.ImageCollectionSavingProgress, New System.EventHandler(Of Vintasoft.Imaging.ProgressEventArgs)(AddressOf images_ImageCollectionSavingProgress)
    AddHandler images.ImageCollectionSavingFinished, New System.EventHandler(AddressOf images_ImageCollectionSavingFinished)
    AddHandler images.ImageSavingException, New System.EventHandler(Of Vintasoft.Imaging.ExceptionEventArgs)(AddressOf images_ImageSavingException)

    _isImagesSavingProcessFinished = False
    ' save images to file and switch source
    multipageEncoder.SaveAndSwitchSource = True

    ' save image collection asynchronously
    images.SaveAsync(saveStream, multipageEncoder)

    ' wait while image saving process is finished
    While Not _isImagesSavingProcessFinished
        System.Threading.Thread.Sleep(1)
    End While
    


    ' close FileStream
    saveStream.Close()
End Sub

''' <summary>
''' Image collection saving process is started.
''' </summary>
Private Sub images_ImageCollectionSaving(sender As Object, e As Vintasoft.Imaging.ImageCollectionSavingEventArgs)
    System.Console.Write("Progress: ")
End Sub

''' <summary>
''' Image collection saving process is in progress.
''' </summary>
Private Sub images_ImageCollectionSavingProgress(sender As Object, e As Vintasoft.Imaging.ProgressEventArgs)
    System.Console.Write(String.Format("{0}% ", e.Progress))
End Sub

''' <summary>
''' Image collection is saved successfully.
''' </summary>
Private Sub images_ImageCollectionSaved(sender As Object, e As System.EventArgs)
    System.Console.WriteLine("Images are saved successfully.")
End Sub

''' <summary>
''' Image collection is NOT saved.
''' </summary>
Private Sub images_ImageSavingException(sender As Object, e As Vintasoft.Imaging.ExceptionEventArgs)
    System.Console.WriteLine(e.Exception.Message)
    System.Console.WriteLine("Images are NOT saved.")
End Sub

''' <summary>
''' Image collection saving process is finished.
''' </summary>
Private Sub images_ImageCollectionSavingFinished(sender As Object, e As System.EventArgs)
    Dim images As Vintasoft.Imaging.ImageCollection = DirectCast(sender, Vintasoft.Imaging.ImageCollection)

    ' unsubscribe from image collection events
    RemoveHandler images.ImageCollectionSaving, AddressOf images_ImageCollectionSaving
    RemoveHandler images.ImageCollectionSavingProgress, AddressOf images_ImageCollectionSavingProgress
    RemoveHandler images.ImageCollectionSaved, AddressOf images_ImageCollectionSaved
    RemoveHandler images.ImageSavingException, AddressOf images_ImageSavingException
    RemoveHandler images.ImageCollectionSavingFinished, AddressOf images_ImageCollectionSavingFinished

    ' indicate that image collection saving process is finished
    _isImagesSavingProcessFinished = True
End Sub


/// <summary>
/// Indicates whether image collection saving process is finished.
/// </summary>
bool _isImagesSavingProcessFinished = false;



/// <summary>
/// Example of ImageCollection.SaveAsync.
/// </summary>
public void ImageCollectionSaveAsyncExample()
{
    // create image collection
    Vintasoft.Imaging.ImageCollection images = new Vintasoft.Imaging.ImageCollection();

    // add several images into collection
    // [ do not forget to set your image file paths here! ]
    images.Add("testImage1.jpg");
    images.Add("testImage2.bmp");
    images.Add("testImage3.png");

    // create FileStream for saving
    System.IO.FileStream saveStream = new System.IO.FileStream(
        "new-file-name.tif", System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.ReadWrite);

    // create the TiffEncoder instance
    Vintasoft.Imaging.Codecs.Encoders.MultipageEncoderBase multipageEncoder =
        new Vintasoft.Imaging.Codecs.Encoders.TiffEncoder();

    // subscribe to the image collection events
    images.ImageCollectionSaving +=
        new System.EventHandler<Vintasoft.Imaging.ImageCollectionSavingEventArgs>(images_ImageCollectionSaving);
    images.ImageCollectionSaved += new System.EventHandler(images_ImageCollectionSaved);
    images.ImageCollectionSavingProgress += new System.EventHandler<Vintasoft.Imaging.ProgressEventArgs>(
        images_ImageCollectionSavingProgress);
    images.ImageCollectionSavingFinished += new System.EventHandler(images_ImageCollectionSavingFinished);
    images.ImageSavingException += new System.EventHandler<Vintasoft.Imaging.ExceptionEventArgs>(
        images_ImageSavingException);

    _isImagesSavingProcessFinished = false;
    // save images to file and switch source
    multipageEncoder.SaveAndSwitchSource = true;

    // save image collection asynchronously
    images.SaveAsync(saveStream, multipageEncoder);

    // wait while image saving process is finished
    while (!_isImagesSavingProcessFinished)
    {
        System.Threading.Thread.Sleep(1);
    };

    // close FileStream
    saveStream.Close();
}

/// <summary>
/// Image collection saving process is started.
/// </summary>
private void images_ImageCollectionSaving(object sender, Vintasoft.Imaging.ImageCollectionSavingEventArgs e)
{
    System.Console.Write("Progress: ");
}

/// <summary>
/// Image collection saving process is in progress.
/// </summary>
private void images_ImageCollectionSavingProgress(object sender, Vintasoft.Imaging.ProgressEventArgs e)
{
    System.Console.Write(string.Format("{0}% ", e.Progress));
}

/// <summary>
/// Image collection is saved successfully.
/// </summary>
private void images_ImageCollectionSaved(object sender, System.EventArgs e)
{
    System.Console.WriteLine("Images are saved successfully.");
}

/// <summary>
/// Image collection is NOT saved.
/// </summary>
private void images_ImageSavingException(object sender, Vintasoft.Imaging.ExceptionEventArgs e)
{
    System.Console.WriteLine(e.Exception.Message);
    System.Console.WriteLine("Images are NOT saved.");
}

/// <summary>
/// Image collection saving process is finished.
/// </summary>
private void images_ImageCollectionSavingFinished(object sender, System.EventArgs e)
{
    Vintasoft.Imaging.ImageCollection images = (Vintasoft.Imaging.ImageCollection)sender;

    // unsubscribe from image collection events
    images.ImageCollectionSaving -= images_ImageCollectionSaving;
    images.ImageCollectionSavingProgress -= images_ImageCollectionSavingProgress;
    images.ImageCollectionSaved -= images_ImageCollectionSaved;
    images.ImageSavingException -= images_ImageSavingException;
    images.ImageCollectionSavingFinished -= images_ImageCollectionSavingFinished;

    // indicate that image collection saving process is finished
    _isImagesSavingProcessFinished = true;
}

Требования

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

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