Использование VintaSoft Imaging .NET SDK совместно с библиотекой Emgu CV (Open CV).
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"); } }