Amedora Ahmed Ответов: 0

Двоичные данные изображение в черно - белый файл изображения C#


Я читаю двоичное изображение данных с устройства последовательного порта, как я могу записать его в черно-белый файл изображения. Проект представляет собой счетную машину, которая является решением. устройство сканирует изображения серийного номера пересчитанной купюры включая счетчик данных

Ниже приведены данные, возвращаемые с устройства в виде чтения и записи в текстовый файл нечитаемые строки-это двоичные данные серийных номеров каждой подсчитанной купюры. я хочу прочитать эти данные и записать необработанные двоичные данные в изображение

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


Что я уже пробовал:

Я попробовал несколько способов записи в файл изображения 100 x 24, но я получаю только черное изображение с некоторым размытием с пикселями поперек него. ниже приведен мой код
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();// = null;//  string.Empty;
            //SetReceivedText(spL.ReadExisting());
            var vImageByte = new List<byte>();
            Thread.Sleep(5000);


            receiveBuffer.Append(Environment.NewLine);
            int bByteCount = 0;
            //char readChar = "";

            //Task k = new Task()
            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"); //"\\f";
                            break;
                    }
                    //readChar = c.ToString();
                }
                else if (char.IsControl(c) || myByte.ToString() == "33" || myByte.ToString() == "63")
                {
                    receiveBuffer.Append("");
                }
                else
                {

                    //if character is string * start reading image data
                    if (c.ToString() == "*")
                    {




                        while (true)
                        {

                            //MessageBox.Show(c.ToString(), "Teller App", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                            //byte singleByte = buffer[bByteCount];
                            char buffCharData = (char)buffer[l];
                            //MessageBox.Show(buffCharData.ToString(), "Teller App", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                            if (buffCharData == '\n')
                            {
                                int b = l - 2;
                                buffCharData = (char)buffer[b];
                                //MessageBox.Show(buffCharData.ToString(), "Teller App", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                                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]);
                            //singleByte.CopyTo(imageByte, imageByte.Length);
                            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";
                        //WriteBitmapFile(fiPath, 224, 24, imageByte2);
                        //SaveBitmap(fiPath, 100, 20, imageByte2);
                        //File.WriteAllBytes(fiPath, imageByte2);

                        //calculate stride 
                        //PixelFormat pf = PixelFormat.Format4bppIndexed;
                        //int bitsPerPixel = ((int)pf & 0xff00) >> 4;
                        //int bytesPerPixel = (bitsPerPixel + 3) / 4;
                        //int stride =  4 * (100 * bitsPerPixel + 3)/4; //4 * ((111 * bytesPerPixel + 3) / 4);
                        //unsafe
                        //{
                        //    fixed (byte* ptr = imageByte2)
                        //    {
                        //        using (Bitmap image = new Bitmap(111, 24, stride, PixelFormat.Format4bppIndexed, new IntPtr(ptr)))
                        //        {
                        //            image.
                        //            image.Save(fiPath);
                        //        }
                        //    }
                        //}


                        unsafe
                        {
                            fixed (byte* pBytes = imageByte2)
                            {
                                int width = 50; // Your width
                                int height = 24; // Your height
                                int stride = width * 4; // Your stride
                                Bitmap bitmap = new Bitmap(width, height, stride, PixelFormat.Format32bppArgb, new IntPtr(pBytes));
                                bitmap.Save(fiPath); // Could save to another format like .jpg
                            }
                        }

                        storeImageToFile(ByteArrayToBitmap(imageByte2, 100, 24), fiPath);
                    }
                    string data = "";
                    data = string.Format("{0}", c.ToString());// System.Text.ASCIIEncoding.ASCII.GetChars(buffer).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);
        }

    }

Richard MacCutchan

Сначала вам нужно знать формат входных данных и как создать видимое изображение из этих данных.

Amedora Ahmed

спасибо за ваш комментарий @Richard, информация, которую я получил от персонала службы поддержки поставщиков, заключается в том, что это бинаризованные данные серийного номера

Richard MacCutchan

Ну, боюсь, это ничего не значит.

Amedora Ahmed

@Ричард, ты прав... это ничего не значит

0 Ответов