Use VintaSoft Imaging .NET SDK with Emgu CV (Open CV) library
February 25, 2022
/// <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");
}
}