diff --git a/src/bindings/csharp/openalpr-net/openalpr-net.cpp b/src/bindings/csharp/openalpr-net/openalpr-net.cpp index a691f20..d1519c9 100644 --- a/src/bindings/csharp/openalpr-net/openalpr-net.cpp +++ b/src/bindings/csharp/openalpr-net/openalpr-net.cpp @@ -452,6 +452,32 @@ namespace openalprnet { return gcnew AlprResultsNet(results); } + /// + /// Pre-warp from raw pixel data. + /// + array^ PreWarp(array^ imageBuffer) + { + std::vector buffer = AlprHelper::ToVector(imageBuffer); + cv::Mat src = cv::imdecode(buffer, 1); + + alpr::PreWarp *preWarp = new alpr::PreWarp(m_Impl->getConfig()); + cv::Mat warpedImage = preWarp->warpImage(src); + + std::vector warpedImageVector; + cv::imencode(".jpg", warpedImage, warpedImageVector); + + const size_t warpedImageSize = warpedImageVector.size(); + + array^ warpedImageByteArray = gcnew array(warpedImageSize); + pin_ptr pin(&warpedImageByteArray[0]); + + std::memcpy(pin, &warpedImageVector[0], warpedImageSize); + + delete preWarp; + + return warpedImageByteArray; + } + bool IsLoaded() { return m_Impl->isLoaded(); }