调用dll 传图片数据
[DllImport("Dll1.dll")]
public static extern int ProcessImage([In] byte[] imageData, [In] int width, [In] int height, [In] int channel, [In] int stride, [In] string name);
private void button2_Click(object sender, EventArgs e)
{
Bitmap image = new Bitmap("D:\\1.jpg");
Rectangle rect = new Rectangle(0, 0, image.Width, image.Height);
BitmapData bmpData = image.LockBits(rect, ImageLockMode.ReadWrite, image.PixelFormat);
int bytes = Math.Abs(bmpData.Stride) * image.Height;
byte[] imageData = new byte[bytes];
Marshal.Copy(bmpData.Scan0, imageData, 0, bytes);
int stride = bmpData.Stride;
int channel = Bitmap.GetPixelFormatSize(image.PixelFormat) / 8;
image.UnlockBits(bmpData);
string name = "111";
Stopwatch sw = new Stopwatch();
sw.Start();
int ret = ProcessImage(imageData, image.Width, image.Height, channel, stride, name);
sw.Stop();
Console.WriteLine(ret);
Console.WriteLine(sw.ElapsedMilliseconds);
}
//.h文件
extern "C" __declspec(dllexport) int ProcessImage(IN unsigned char* imageData, int width, int height, int channel, int stride, char* picName);
//.cpp文件
int ProcessImage(IN unsigned char* imageData, int width, int height, int channel, int stride, char* picName)
{
string name = picName;
cv::Mat img;
if (channel == 3) {
img = cv::Mat(height, width, CV_8UC3, imageData, stride).clone();
}
else {
img = cv::Mat(height, width, CV_8UC1, imageData, stride).clone();
}
return 0;
}