Использование VintaSoft Imaging .NET SDK совместно с библиотекой Emgu CV (Open CV).

Категория: Imaging.NET

25 февраля 2022

VintaSoft Imaging .NET SDK предоставляет функционал для работы с изображениями. SDK позволяет создать, загрузить, обработать, распечатать и сохранить изображение.

SDK предоставляет более 110 команд для обработки изображений, которые позволяют:

SDK использует класс Vintasoft.Imaging/Vintasoft.Imaging.VintasoftImage для работы с изображением. Метод Vintasoft.Imaging.VintasoftImage.OpenPixelManipulator позволяет заблокировать данные изображения и получить доступ к данным изображения с помощью класса Vintasoft.Imaging.PixelManipulator. Свойство Vintasoft.Imaging.PixelManipulator.Scan0 позволяет получить указатель на начало данных изображения в неуправляемой памяти. Указатель на начало данных изображения в неуправляемой памяти может быть использован любой другой .NET библиотекой, которая может работать с изображениями в неуправляемой памяти. Например, изображение созданное SDK может быть обработано с помощью библиотеки Emgu CV - кросс-платформенная .NET обертка для библиотеки обработки изображений Open CV.

Вот пример C# кода, который демонстрирует как можно создать изображение в библиотеке VintaSoft Imaging .NET SDK (создать объект Vintasoft.Imaging.VintasoftImage), обработать изображение с помощью библиотеки Open CV и сохранить обработанное изображение в TIFF файл c помощью VintaSoft Imaging .NET SDK:
/// <summary>
/// Loads image from PNG file using VintaSoft Imaging .NET SDK,
/// inverts loaded image using Emgu CV (Open CV) library,
/// saves inverted image to a new PNG file using VintaSoft Imaging .NET SDK.
/// </summary>
static public void InvertVintasoftImageUsingEmguCV()
{
    // create VintasoftImage from PNG file
    using (Vintasoft.Imaging.VintasoftImage vintasoftImage = new Vintasoft.Imaging.VintasoftImage("source.png"))
    {
        // open pixel manipulator
        Vintasoft.Imaging.PixelManipulator pixelManipulator = vintasoftImage.OpenPixelManipulator();

        // create rectangle that defines region of interest on image
        System.Drawing.Rectangle imageROI = new System.Drawing.Rectangle(0, 0, vintasoftImage.Width, vintasoftImage.Height);
        // lock pixels of image
        pixelManipulator.LockPixels(imageROI, Vintasoft.Imaging.BitmapLockMode.ReadWrite);

        // create Emgu CV image from pointer to unmanaged memory
        using (Emgu.CV.Image emguCvImage =
            new Emgu.CV.Image(
                vintasoftImage.Width,
                vintasoftImage.Height,
                pixelManipulator.Stride,
                pixelManipulator.Scan0))
        {
            // invert image using Open CV and get new result image
            using (Emgu.CV.Image emguCvImage2 = emguCvImage.Not())
            {
                // copy inverted image back to the source image
                // (copy image data from unmanaged memory of emguCvImage2 object to unmanaged data of vintasoftImage/emguCvImage object)
                emguCvImage2.CopyTo(emguCvImage);
            }
        }

        // close pixel manipulator and specify that image data is changed
        vintasoftImage.ClosePixelManipulator(true);

        // save inverted image to new PNG file
        vintasoftImage.Save("result.png");
    }
}