我使用的环境为emgucv3.0+vs2015
我现在用的是之前数据库大作业用到的一个webservice 没建新的。
首先需要在vs里创建一个asp.net Web应用程序 模板选Empty
然后添加一个webservice。
由于在程序和webservice之间传递Bitmap貌似有点问题,所以我这里是将他们转换为byte的数组来传递的。
先添加那几个emgucv的dll文件的引用,接着写入代码
[WebMethod]
public byte[] emgu(byte[] a)
{
MemoryStream ms1 = new MemoryStream(a);
Bitmap bm = (Bitmap)Image.FromStream(ms1);
ms1.Close();
Image<Bgra, byte> b = new Image<Bgra, byte>(bm);
var c = b.Convert<Gray, byte>();
MemoryStream ms = new MemoryStream();
c.Bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
byte[] bytes = ms.GetBuffer();
ms.Close();
return bytes;
}
只是一个将图片转为灰度图的测试程序
然后在解决方案中新建两个文件夹 叫x86和x64,并把emgucv安装目录下bin文件夹下的x86和x64文件夹内的内容复制过去
然后右键发布解决方案
我这用的是我之前就建好的一个应用程序服务,如果之前没有建过,在这里应该需要新建一个
然后一路下一步, 到最后点下发布就好了。
接着还要把那两个文件夹给传到服务器上去,同样是右键文件夹,然后发布
接着就要进一下你的azure的控制台了,因为发布文件夹默认在这个服务的根目录,我们需要把它移到程序的执行文件所在的文件夹
一次点开,打开控制台
使用 ls 命令可以看到当前目录的所有文件夹(其他的那些dll文件都是我之前测试传上去的)
只要把x64 和x86这两个文件夹移到bin内就可以了
先在bin内创建两个文件夹,然后返回此目录,将文件复制过去
依次输入
cd bin
mkdir x86
mkdir x64
cd ..
xcopy x86 bin\x86
xcopy x64 bin\x64
然后记一下网址,在这。
然后新建一个winfrom应用程序
在项目选项卡里选择添加服务引用
将那个网站复制过去,然后加上 \ 后面跟着你建的那个webservice的名字,如果是默认的,那就是WebService1.asmx
加起来就会看起来是这样的
http://xxxxxx.azurewebsites.net/WebService1.asmx
然后点击转到
再确定就可以了
我在这个程序里放了一个button和一个PictureBox
代码如下
全部都是默认名称。
namespace WindowsFormsApplication4
{
public partial class Form1 : Form
{
ServiceReference1.WebService1SoapClient a = new ServiceReference1.WebService1SoapClient();
Bitmap b = new Bitmap("0a0a5820d572a6a43adfcbf18af7c39b.jpg");
public Form1()
{
InitializeComponent();
pictureBox1.Image = b;
}
private void button1_Click(object sender, EventArgs e)
{
MemoryStream ms = new MemoryStream();
b.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
byte[] bytes = ms.GetBuffer();
ms.Close();
var c = a.emgu(bytes);
MemoryStream ms1 = new MemoryStream(c);
Bitmap bm = (Bitmap)Image.FromStream(ms1);
ms1.Close();
pictureBox1.Image = bm;
}
}
}
接着还要修改下App.config
否则会出现 “已超过传入消息(65536)的最大消息大小配额。若要增加配额,请使用相应绑定元素上的 MaxReceivedMessageSize 属性。”的报错
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="WebService1Soap" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647"
maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://marketmanager.azurewebsites.net/WebService1.asmx"
binding="basicHttpBinding" bindingConfiguration="WebService1Soap"
contract="ServiceReference1.WebService1Soap" name="WebService1Soap" />
</client>
</system.serviceModel>
</configuration>
其中这部分有修改
<binding name="WebService1Soap" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647"
maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
</binding>
最后直接运行就可以了