I am reading binary data image from a serial port device how can i write it to a black and white image file. The project is a bill counting machine which solution. the device scans images of serial number of bill counted including the data counter
Below is the data returned from the device as read and written to a text file the unreadable strings are the binary data of the serial numbers of each bill counted. i want to read those data and write the raw binary data to image
NO.0012 SERIAL NUMBER
DATE 17.10.2017 21:21:24
EUR OP1
DENOMI. PCS. AMOUNT
50 1 50
20 1 20
10 4 40
5 2 10
TOTAL 8 120
DENO. VER. SERI NUMBER
10A *ÆxÿðÿðÿðððþàðßàÿÿàÿÿàÿÿàäÀ;ÀÿÀ{ÿÀxÿxàøøðÿðxÿðøÿðpÿÀÿÀÿÀÇÀ<çÀ<øøøøÀàðüðþñáþñáþÿàÿà<ÿãüÿÿüÿÿüüüüÀðwððÿÿþÿÿÿñ÷þññþñùþÿÿþÿÿþþÿüüÀxxGxÿðÿÿþÿÿÿqöø<ü<ø<|xxxøø°üÿüÿþþü<><><<|xÿxÿøøøø@ððÀðþð þðßþÿÿìÿàÿàÿàÿÀ<
5A *Æðÿþÿþþÿÿÿÿÿÿàððððxøxøÿxÿþxÿðxðxðððÿðÿÿÿÿøÿøxxÿxÿxøøøðøÿøÿøÿøø{øøøx øøø<<<<ø<ø<øÿøþÀÀÀÀ<8<ü<üþüþüþüþ>|ÿü<ÿü<ü<À<à8Àÿüÿüÿüÿüà<ÿà<ÿà<áÿüáÿüüàÀàð<ð<ñà>ÿà>ÿà>ÿà>ÿáþÿÿþÿÿþÿüààáàÿüÿÿþÿñþüðððÿþÿÿþÿÿþÿàþþðþðþðþððÿððÿðÿððððÿÿÿxÿxÿxðxÿðÿðÿOøðÿÿøðxxððø 5A *Æÿÿÿÿÿÿøðÿÿÿÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿððÿðÿðÿðøðøÿÿÿxÿÿÿÿÿðøøøøxøxøÿxÿÿxÿÿxÿxðxxxÿxÿxÿxÿÿÿøøxøÿÿÿÿÿÿÿÿðÿÿÿÿÿÿxxxxÿÿÿÿÿÿðøøøøøxøÿxøÿxÿÿxÿÿxððÿÿÿÿÿÿÿÿÿxøÿÿÿÿÿÿÿÿððøÿÿÿÿÿøÿøøðÿÿÿÿÿÿÿðÿxxxxÿxÿxÿxÿðxÿøø
10A *Æxÿÿÿÿðÿÿÿÿðÿðø~ø0ÿÀÿÀÇÀÀüüøÀÀàþÿþðþðþðàðàðÿàÿÿàÿÿøðÿÿÿÿ|ø8øø<>x>ü>üøüüàÀþðþÿÿøÿðþðþøðøðÿÿÿðøÿøÿøøxøxÀx<8x<|x<øøÀàà|ãüÿÿüÿÿþáü0ðøøÿøÿxÿðyøøxøÿðÿøÿøðxðððÿ>ÿÿþÿþÿàððÿÿxÿxÿxðxÀÿÿÿø
20A *ÆpxÿÿðÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿøxxxxÿxÿxÿÿxÿøðxxxxxÿxÿxÿxÿøøðxxxxpxøxøøÿÿÿÿxÿðøðððÿðøðøðþpÿÿðððøÿÿÿOÿþðÿðÿðÿðÿÿÿÿÿÿÿÿðpÿÿÿÿÿþÿðÿðÿpþðÿðÿÿÿÿÿÿÿÿÿðÿðÿþðÿÿÿÿÿáÿÿðÿðÿþððÿñññÿñÿñÿÿÿÿàÿðññÿÿÿñÿÿþÿðÿð
50 *ÆÀÿÀÿüÿüÃüü<<<ÿüÿüÿÀÃÀÀÀ<ÇøÿøÿÿÇÿÿÿxüÿÿpÿxÿxÿxÿxxøÿÿðÿðððþÿÿþÿÿþÿÿñÿñþÿÿÿÿþÿþþàððüðþðþñÿüÿþÿàÿàþ<à<ÿà<ÿà<ÿà<À<ü<>ü>ü>ÈÀ8;üüÿ<ø<ø<ø<ø<øÿÿÿwøøøÿøøøøxð8ÿðððpxxxðøðøðÿðÿÿÿÿÿðøðpðððÿàÿþÿþÿþÿþÿþÿþñÿþüààà àààÿüÿüÿüÿàÀ
10A *Æ8ÿøÿøÿøÿÿ88ÿÿÿøÿð8xðøÿÿÿøøøxø8ÿÿÿøðøøàÿÿÿÿÿÿÿøøøððððüÿÿÿÿÿÿðþþÁþÿþþ~ÿÿððàðààþþþþ>þþÿÁààÀþÿþÿüþ<þ<þþ>üüüÀÀüüÿÿüüü<><üüüÀÀÿüÿÿÿÿÀ<<<<ÿÿÿÿÿøüüüü<|<|<ÿ<ø<ø8ø||||ÿ|gÿ||
10A *ÆÿðÿøÿÿÿÿÿøÿðÀ<ÿ<ÿ<<<<|üüøøÿøüxüü<<<|üüøÀÃÀÃüÿüÿüü<><<><<ü<üÿÿÿüÃüÀÀÀÿÀÿÀãàÃàüüüàÀáþÿþÿþþ>þ>>þ>þÿþÿþáüàààÿþÿþÿþþàðÿðÿðøðøðøðøððøðøðàðÿÿ|xxÿxðxðÿðÿøøðøøxxxxxxxxøxøxø8ø8|||x
SIGNATURE
What I have tried:
I have tried several ways to write to file 100 x 24 image but i only get black image with some blur with pixels across it. below is my code
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
SerialPort spL = (SerialPort)sender;
int bufSize = 20;
Byte[] dataBuffer = new Byte[bufSize];
StringBuilder sb = new StringBuilder();
int lk = 0;
byte[] lowbytes = { 0x03, 0x02, 0x0D, 0x0A, 0x0D, 0x0A };
int bytes = spL.BytesToRead;
byte[] buffer = new byte[bytes];
spL.Read(buffer, 0, bytes);
string fiFolderPath = ConfigurationManager.AppSettings["imagePath"] + "\\" + DateTime.Now.ToString("yyyyMMdd");
if (!Directory.Exists(fiFolderPath))
{
Directory.CreateDirectory(fiFolderPath);
}
receiveBuffer.Clear();
var vImageByte = new List<byte>();
Thread.Sleep(5000);
receiveBuffer.Append(Environment.NewLine);
int bByteCount = 0;
foreach (byte myByte in buffer)
{
char c = (char)myByte;
if (char.IsWhiteSpace(c))
{
switch (c)
{
case '\t':
receiveBuffer.Append(" ");
break;
case ' ':
receiveBuffer.Append(" ");
break;
case '\n':
receiveBuffer.Append(Environment.NewLine);
break;
case '\r':
receiveBuffer.Append(Environment.NewLine);
break;
case '\v':
receiveBuffer.Append("\v");
break;
case '\f':
receiveBuffer.Append("\f");
break;
}
}
else if (char.IsControl(c) || myByte.ToString() == "33" || myByte.ToString() == "63")
{
receiveBuffer.Append("");
}
else
{
if (c.ToString() == "*")
{
while (true)
{
char buffCharData = (char)buffer[l];
if (buffCharData == '\n')
{
int b = l - 2;
buffCharData = (char)buffer[b];
break;
}
bool jdata = false;
switch (buffCharData)
{
case '\t':
jdata = true;
break;
case '\n':
jdata = true;
break;
case '\r':
jdata = true;
break;
}
if (jdata)
{
break;
}
vImageByte.Add(buffer[l]);
l++;
}
byte[] imageByte2 = vImageByte.ToArray();
string fiPath = ConfigurationManager.AppSettings["imagePath"] + "\\" + DateTime.Now.ToString("yyyyMMdd");
Random r = new Random();
fiPath = fiPath + "\\" + transID + "_" + r.Next(0, 1000) + ".bmp";
unsafe
{
fixed (byte* pBytes = imageByte2)
{
int width = 50;
int height = 24;
int stride = width * 4;
Bitmap bitmap = new Bitmap(width, height, stride, PixelFormat.Format32bppArgb, new IntPtr(pBytes));
bitmap.Save(fiPath);
}
}
storeImageToFile(ByteArrayToBitmap(imageByte2, 100, 24), fiPath);
}
string data = "";
data = string.Format("{0}", c.ToString());
receiveBuffer.Append(data);
}
bByteCount++;
}
receiveBuffer.Append(Environment.NewLine);
receiveBuffer.Append("----------------------------------------------------------------");
receiveBuffer.Append(Environment.NewLine);
SetReceivedText(receiveBuffer.ToString());
writeToLog(receiveBuffer.ToString());
}
catch (Exception ex)
{
MessageBox.Show("check general log :-" + ex.Message, "Teller App", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
}