So I have wcf rest service which succesfuly runs from a console app, if I navigate to: http://localhost:8000/Service/picture/300/400 my image is displayed note the 300/400 sets the width and height of the image within the body of the html page.
The code looks like this:
namespace WcfServiceLibrary1
{
[ServiceContract]
public interface IReceiveData
{
[OperationContract]
[WebInvoke(Method = "GET", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Xml, UriTemplate = "picture/{width}/{height}")]
Stream GetImage(string width, string height);
}
public class RawDataService : IReceiveData
{
public Stream GetImage(string width, string height)
{
int w, h;
if (!Int32.TryParse(width, out w))
{
w = 640;
}
// Handle error
if (!Int32.TryParse(height, out h))
{
h = 400;
}
Bitmap bitmap = new Bitmap(w, h);
for (int i = 0; i < bitmap.Width; i++)
{
for (int j = 0; j < bitmap.Height; j++)
{
bitmap.SetPixel(i, j, (Math.Abs(i - j) < 2) ? Color.Blue : Color.Yellow);
}
}
MemoryStream ms = new MemoryStream();
bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
ms.Position = 0;
WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpeg";
return ms;
}
}
}
What I want to do now is use a client application "my windows form app" and add that image into a picturebox. Im abit stuck as to how this can be achieved as I would like the width and height of the image from my wcf rest service to be set by the width and height of the picturebox. I have tryed this but on two of the lines have errors and im not even sure if it will work as the code for my wcf rest service seperates width and height with a "/" if you notice in the url.
string uri = "http://localhost:8080/Service/picture";
private void button1_Click(object sender, EventArgs e)
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("<picture>");
sb.AppendLine("<width>" + pictureBox1.Image.Width + "</width>");
// the url looks like this http://localhost:8080/Service/picture/300/400 when accessing the image so I am trying to set this here
sb.AppendLine("<height>" + pictureBox1.Image.Height + "</height>");
sb.AppendLine("</picture>");
string picture = sb.ToString();
byte[] getimage = Encoding.UTF8.GetBytes(picture); // not sure this is right
HttpWebRequest req = WebRequest.Create(uri); //cant convert webrequest to httpwebrequest
req.Method = "GET";
req.ContentType = "image/jpg";
req.ContentLength = getimage.Length;
MemoryStream reqStrm = req.GetRequestStream(); //cant convert IO stream to IO Memory stream
reqStrm.Write(getimage, 0, getimage.Length);
reqStrm.Close();
HttpWebResponse resp = req.GetResponse(); // cant convert web respone to httpwebresponse
MessageBox.Show(resp.StatusDescription);
pictureBox1.Image = Image.FromStream(reqStrm);
reqStrm.Close();
resp.Close();
}
So just wondering if some one could help me out with this futile attempt at adding a variable image size from my rest service to a picture box on button click.
This is the host app aswell:
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string baseAddress = "http://" + Environment.MachineName + ":8000/Service";
ServiceHost host = new ServiceHost(typeof(RawDataService), new Uri(baseAddress));
host.AddServiceEndpoint(typeof(IReceiveData), new WebHttpBinding(), "").Behaviors.Add(new WebHttpBehavior());
host.Open();
Console.WriteLine("Host opened");
Console.ReadLine();