This is the code that I've tried to write. I first tell the "LinkSprite JPEG Camera" to take a picture and then I read the JPEG file contents. There are no errors and the code is working, but the problem is the result comes was very slowly, I've seen "done" i.e. reached to FFD9 after minute. The message of the message box emerged after that much time. I want get the image which is stored in the camera buffer after sending the "take picture" command and to display it in the form. The camera is: LinkSprite JPEG Camera The Manual Mbed Example ( Test program ) My code is:
private void TakeSnap_Click(object sender, EventArgs e)
{
byte[] sendCmd = new byte[9] { 0x56, 0x00, 0x31, 0x05, 0x04, 0x01, 0x00, 0x19, 0x11 };
try
{
if (!(CamPort.IsOpen)) CamPort.Open();
CamPort.Write(sendCmd, 0, 9);
Thread.Sleep(100);
for (int i = 0; i < 5; i++)
{
ReceivedMsg[i] = (byte)(CamPort.ReadByte());
}
if (ReceivedMsg[0].ToString("x") == "76" && ReceivedMsg[1].ToString("x") == "0" && ReceivedMsg[2].ToString("x") == "31" && ReceivedMsg[3].ToString("x") == "0" && ReceivedMsg[4].ToString("x") == "0")
{
try
{
CamPort.DiscardOutBuffer();
CamPort.DiscardInBuffer();
byte[] TakePicCmd = new byte[] { 0x56, 0x00, 0x36, 0x01, 0x00 };
CamPort.Write(TakePicCmd, 0, 5);
Thread.Sleep(100);
for (int i = 0; i < 5; i++)
{
ReceivedMsg[i] = (byte)(CamPort.ReadByte());
}
if (ReceivedMsg[0].ToString("x") == "76" && ReceivedMsg[1].ToString("x") == "0" && ReceivedMsg[2].ToString("x") == "36" && ReceivedMsg[3].ToString("x") == "0" && ReceivedMsg[4].ToString("x") == "0")
{
try
{
CamPort.DiscardOutBuffer();
CamPort.DiscardInBuffer();
byte[] ReadSizeCommand = new byte[5] { 0x56, 0x00, 0x34, 0x01, 0x00 };
CamPort.Write(ReadSizeCommand, 0, 5);
Thread.Sleep(100);
for (int i = 0; i < 9; i++)
{
ReceivedMsg[i] = (byte)(CamPort.ReadByte());
}
if (ReceivedMsg[0].ToString("x") == "76" && ReceivedMsg[1].ToString("x") == "0" && ReceivedMsg[2].ToString("x") == "34" && ReceivedMsg[3].ToString("x") == "0" && ReceivedMsg[4].ToString("x") == "4" && ReceivedMsg[5].ToString("x") == "0" && ReceivedMsg[6].ToString("x") == "0")
{
int ImageSize=(((ReceivedMsg[7] & 0x00ff) << 8) | (ReceivedMsg[8] & 0x00ff));
try
{
CamPort.DiscardOutBuffer();
CamPort.DiscardInBuffer();
byte[] body = new byte[32];
byte[] header = new byte[5];
bool EndFlag = false;
while (!EndFlag)
{
ReadJpegFileCommand();
Thread.Sleep(25);
for (int i = 0; i < 5; i++) header[i] = (byte)CamPort.ReadByte(); if (((int)header[0] == 0x76) && (header[1] == 0x00) && (header[2] == 0x32) && (header[3] == 0x00) && (header[4] == 0x00))
{
for (int i = 0; i < 32; i++)
body[i] = (byte)CamPort.ReadByte();
for (int i = 1; i < body.Length; i++)
{
if ((body[i - 1] == 0xFF) && (body[i - 0] == 0xD9))
{
EndFlag = true;
MessageBox.Show("done");
}
}
}
else
{
MessageBox.Show("Unexpted Returned value ");
}
}
}
catch (System.Exception ex) { MessageBox.Show(ex.Message); }
}
else { MessageBox.Show("Reset the camera and start again0 !!"); }
}
catch (System.Exception ex) { MessageBox.Show(ex.Message); }
}
else { MessageBox.Show("Reset the camera and start again1 !!"); }
}
catch (System.Exception ex) { MessageBox.Show(ex.Message); }
}
else { MessageBox.Show("Reset the camera and try again2 !!"); }
}
catch (System.Exception ex) { MessageBox.Show(ex.Message); }
}
public void ReadJpegFileCommand()
{
try
{
MH = (byte)(factor / 0x100);
ML = (byte)(factor % 0x100);
byte[] ReadImageCommand = new byte[16] { 0x56, 0x00, 0x32, 0x0C, 0x00, 0x0A, 0x00, 0x00, MH, ML, 0x00, 0x00, 0x00, 0x20, 0x00, 0x0a };
CamPort.Write(ReadImageCommand, 0, 16);
factor += 0x20;
}
catch (System.Exception ex) { MessageBox.Show(ex.Message); }
}