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();
}