c#调用dll传图片数据

调用dll 传图片数据

//c#
[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;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牛奶奥利奥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值