Perşembe, Şubat 09, 2006

Invalid Parameter used, image from memory stream ... doh!

Geçenlerde, network kamera ile uğraşırken, .NET de İmage'i MemoryStream' e ,Memory stream ' i image ' e çevirmeye çalıştığımda sürekli bu hatayı aldım.Daha doğrusu client-server mimarisinde işlem yapmaya çalışırken, resimleri networkten aktarmaya çalışıyordum.

Network Cam ----> TCP Server ------> TCP Client

Şeklinde çalışan bir sistemde, resim nasıl alacağız ? SocketClient a data geldiğinde bufferın boşalana kadar resim datasını byte byte okumayı denedim. O zaman sorunum çözüldü.

Client:

String strMessage = System.Text.ASCIIEncoding.ASCII.GetString(pSocket.GetRawBuffer,0, pSocket.GetMessageLength); //

if (strMessage.Length > 0)
{

for(int g=0;g‹psocket.getmessagelength;g++)
{

if (recv==0)
{
data[g]=pSocket.GetRawBuffer[g];
}
else
{
data[pos]=pSocket.GetRawBuffer[g];
}
pos+=1;
}
recv += 1;
MemoryStream str = new MemoryStream(data);
c = Image.FromStream(str);
if (pSocket.GetMessageLength ‹ pSocket.GetSizeOfRawBuffer)
this.p1.Image =c;
}
}


server :


string sURL = "http://"+strMessage.Trim();
string t ="";
for(int j=0;j‹ sURL.Length;j++)
if (s!="\0")
{
s=sURL.Substring(j,1); t+=s;
}
}
WebRequest request;
request = WebRequest.Create(t);
request.Credentials = new NetworkCredential("root","root");
Stream stream;
stream = request.GetResponse().GetResponseStream();
StreamReader reader = new StreamReader(stream);
try
{
if(stream!= null)
{
Image img = Image.FromStream(stream);
//img.Save(@"C:\test1.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
Byte[] b = new Byte[0];
b = convertImageToByte(img);
pSocket.Send(b);
}
}
catch
{
}

Hiç yorum yok: