Я занимаюсь разработкой приложения на C # .NET, которое будет отображать изображение, снятое с камеры (умная камера). Я использую функцию ниже, чтобы преобразовать необработанные данные, полученные с камеры (это байтовый массив), в растровое изображение. Проблема, с которой я сталкиваюсь в приведенном ниже коде, заключается в том, что изображение, отображаемое в графическом окне приложения C # .NET (в идеале должно быть живым изображением), выглядит как ролик фильма и продолжает прокручиваться вправо. Есть идеи, как решить эту проблему?
private Image ByteArrayToImage(byte[] myByteArray)
{
if (myByteArray != null)
{
MemoryStream ms = new MemoryStream(myByteArray);
int Height = 504; /*The exact height of image from Smart Camera*/
int Width = 664; /*The exact width of image from Smart Camera*/
BitmapData bmpData =
bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height),
ImageLockMode.WriteOnly, bmp.PixelFormat);
Marshal.Copy(myByteArray, 0, bmpData.Scan0, myByteArray.Length);
Bitmap bmp = new Bitmap(Width, Height, PixelFormat.Format24bppRgb);
BitmapData bmpData =
bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height),
ImageLockMode.ReadWrite, bmp.PixelFormat);
int offset = 0;
long ptr = bmpData.Scan0.ToInt64();
for (int i = 0; i < Height; i++)
{
Marshal.Copy(myByteArray, offset, new IntPtr(ptr), Width);
offset += (Width);
ptr += bmpData.Stride;
}
bmp.UnlockBits(bmpData);
return bmp;
}
return null;
}
@ Марк, найдите ниже сегмент кода, который я использую для получения данных с камеры ...
Логика: сначала я получаю размер изображения, а затем открываю петлю n-соединения, пока не получу размер байтов от камеры.
public static byte[] receivedata(Socket clientSock)
{
if (clientSock != null)
{
byte[] size = new byte[10000000];
byte[] buffer = null;
int ch, received, offset;
try
{
clientSock.Receive(size);
//MessageBox.Show("size array is " + size[0]
// + " " + size[1] + " " + size[2] + " " );
ch = BitConverter.ToInt32(size, 0);
//ch = 334656;
//MessageBox.Show("Sizeofimg = " + ch + "");
buffer = new byte[ch];
//MessageBox.Show("Start receiving image from camera");
received = 0;
offset = 0;
do
{
received += clientSock.Receive(buffer,
offset + received,
ch - received,
SocketFlags.None);
} while (received < ch);
//MessageBox.Show("Received " + received + " values");
System.Threading.Thread.Sleep(50);
}
catch (Exception e)
{
MessageBox.Show("Error receiving ...");
MessageBox.Show(e.StackTrace);
}
return buffer;
}
else
{
return null;
}
}
}
Пожалуйста, укажите на проблему ...
Заранее спасибо.