コード例 #1
0
        private void bw_DoWork(object sender, DoWorkEventArgs e)
        {
            Byte[]           result = new Byte[10000];
            BackgroundWorker worker = sender as BackgroundWorker;

            ThreadArguments ta = e.Argument as ThreadArguments;

            int resLen = Scanner.MWBscanGrayscaleImage(ta.pixels, ta.width, ta.height, result);

            //ignore positive result if closing is in progress
            if (isClosing)
            {
                resLen = -1;
            }

            if (resLen > 0 && resultDisplayed)
            {
                resLen = -1;
            }

            MWResult mwResult = null;

            if (resLen > 0 && Scanner.MWBgetResultType() == Scanner.MWB_RESULT_TYPE_MW)
            {
                MWResults results = new MWResults(result);

                if (results.count > 0)
                {
                    mwResult = results.getResult(0);
                    result   = mwResult.bytes;
                }
            }

            if (lastTime != null && lastTime.Ticks > 0)
            {
                long timePrev       = lastTime.Ticks;
                long timeNow        = DateTime.Now.Ticks;
                long timeDifference = (timeNow - timePrev) / 10000;
                System.Diagnostics.Debug.WriteLine("frame time: {0}", timeDifference);
            }

            lastTime = DateTime.Now;
            //ignore results shorter than 4 characters for barcodes with weak checksum
            if (mwResult != null && mwResult.bytesLength > 4 || (mwResult != null && mwResult.bytesLength > 0 && mwResult.type != Scanner.FOUND_39 && mwResult.type != Scanner.FOUND_25_INTERLEAVED && mwResult.type != Scanner.FOUND_25_STANDARD))
            {
                resultDisplayed = true;
                String typeName = BarcodeHelper.getBarcodeName(mwResult);

                Deployment.Current.Dispatcher.BeginInvoke(delegate()
                {
                    isClosing = true;
                    BarcodeHelper.scannerResult = new ScannerResult();

                    BarcodeHelper.resultAvailable     = true;
                    BarcodeHelper.scannerResult.code  = mwResult.text;
                    BarcodeHelper.scannerResult.type  = BarcodeHelper.getBarcodeName(mwResult);
                    BarcodeHelper.scannerResult.isGS1 = mwResult.isGS1;

                    Byte[] binArray = new Byte[mwResult.bytesLength];
                    for (int i = 0; i < mwResult.bytesLength; i++)
                    {
                        binArray[i] = mwResult.bytes[i];
                    }


                    BarcodeHelper.scannerResult.bytes = binArray;
                    stopCamera();
                    NavigationService.GoBack();

                    isProcessing    = false;
                    resultDisplayed = false;
                });
            }


            else
            {
                isProcessing = false;
            }
            activeThreads--;
        }
コード例 #2
0
        private static void bWorkerX_DoWork(object sender, DoWorkEventArgs e)
        {
            int width  = ((conversionResult)e.Argument).width;
            int height = ((conversionResult)e.Argument).height;

            byte[] returnArray = ((conversionResult)e.Argument).returnArray;

            //resString = "";
            int resLen = 0;

            if (returnArray != null)
            {
                MWResult mwResult = null;
                byte[]   result   = new byte[10000];

                try
                {
                    // Debug.WriteLine("ReturnArat size: " + returnArray.Length);
                    resLen = MWBarcodeScanner.scanGrayscaleImage(returnArray, width, height, result);
                    // Debug.WriteLine("result size: " + result.Length + "ResLen = " + resLen);
                    mwResult = null;
                }
                catch (Exception ee)
                {
                    Debug.WriteLine(ee.Message);
                }

                if (resultDisplayed)
                {
                    resLen = -1;
                }

                if (resLen > 0)
                {
                    MWResults results = new MWResults(result);
                    string    s       = System.Text.Encoding.UTF8.GetString(result, 0, result.Length);

                    if (results.count > 0)
                    {
                        mwResult = results.getResult(0);
                        result   = mwResult.bytes;
                    }

                    if ((resultDisplayed == false) && (mwResult != null))
                    {
                        resultDisplayed = true;

                        string typeName = BarcodeHelper.getBarcodeName(mwResult.type);
                        //  mwResult.typeText = typeName;
                        byte[] parsedResult = new byte[6000];

                        string displayString = "";

                        if (USE_MWPARSER == true)
                        {
                            double parserRes = -1;
                            //ignore results shorter than 4 characters for barcodes with weak checksum
                            if (mwResult != null && mwResult.bytesLength > 4 || (mwResult != null && mwResult.bytesLength > 0 && mwResult.type != Scanner.FOUND_39 && mwResult.type != Scanner.FOUND_25_INTERLEAVED && mwResult.type != Scanner.FOUND_25_STANDARD))
                            {
                                //Scanner.MWBsetDuplicate(mwResult.bytes, mwResult.bytesLength); //so praa?

                                if (MWPARSER_MASK != Scanner.MWP_PARSER_MASK_NONE && !(MWPARSER_MASK == Scanner.MWP_PARSER_MASK_GS1 && !mwResult.isGS1))
                                {
                                    parserRes = BarcodeLib.Scanner.MWPgetFormattedText(MWPARSER_MASK, System.Text.Encoding.UTF8.GetBytes(mwResult.encryptedResult), parsedResult);

                                    if (parserRes >= 0)
                                    {
                                        mwResult.text = Encoding.UTF8.GetString(parsedResult, 0, parsedResult.Length);


                                        int index = mwResult.text.IndexOf('\0');
                                        if (index >= 0)
                                        {
                                            mwResult.text = mwResult.text.Remove(index);
                                        }

                                        if (MWPARSER_MASK == Scanner.MWP_PARSER_MASK_AAMVA)
                                        {
                                            typeName = typeName + " (AAMVA)";
                                        }
                                        else if (MWPARSER_MASK == Scanner.MWP_PARSER_MASK_IUID)
                                        {
                                            typeName = typeName + " (IUID)";
                                        }
                                        else if (MWPARSER_MASK == Scanner.MWP_PARSER_MASK_ISBT)
                                        {
                                            typeName = typeName + " (ISBT)";
                                        }
                                        else if (MWPARSER_MASK == Scanner.MWP_PARSER_MASK_HIBC)
                                        {
                                            typeName = typeName + " (HIBC)";
                                        }
                                        else if (MWPARSER_MASK == Scanner.MWP_PARSER_MASK_SCM)
                                        {
                                            typeName = typeName + " (SCM)";
                                        }
                                    }
                                }
                            }


                            if (parserRes == -1)
                            {
                                displayString = mwResult.text;
                            }
                            else
                            {
                                displayString = System.Text.Encoding.UTF8.GetString(parsedResult);
                            }
                        }
                        else
                        {
                            displayString = mwResult.text;
                        }

                        //     if (USE_ANALYTICS)
                        {
                            //       sendReport(mwResult);
                        }

                        try
                        {
                            //  Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.High, () =>
                            //{
                            //successCallback.barcodeDetected(mwResult);

                            //   displayResultAsync_old(mwResult);
                            // });

                            // displayResultAsync(mwResult);
                        }
                        catch (Exception ee)
                        {
                            Debug.WriteLine(ee.Message);
                        }
                    }
                    resultDisplayed = false;
                    law_n_order.WaitOne();
                    decodedQueue.Enqueue(mwResult);
                    law_n_order.ReleaseMutex();
                }
            }
            //decodedQueue.Enqueue(null); //no need as it's null by default
            //throw new NotImplementedException();
        }
コード例 #3
0
ファイル: ScannerPage.xaml.cs プロジェクト: armstrob/mw
        // scanImage implementation
        public static MWResult scanImage([ReadOnlyArray()] byte[] rawImage, int width, int height)
        {
            MWResult mwResult = null;

            int size = width * height;

            byte[] gray = new byte[size];

            int colorChannels      = 4;
            int colorChannelOffset = 1;

            for (int y = 0; y < height; y++)
            {
                int dstOffset = y * width;
                int srcOffset = ((y * width) * colorChannels) + colorChannelOffset;
                for (int x = 0; x < width; x++)
                {
                    gray[dstOffset + x] = rawImage[srcOffset];
                    srcOffset          += colorChannels;
                }
            }

            string s = null;

            Scanner.MWBsetResultType(Scanner.MWB_RESULT_TYPE_MW);
            byte[] p_data = new byte[10000];
            int    len    = Scanner.MWBscanGrayscaleImage(gray, width, height, p_data);

            if (len > 0)
            {
                MWResults mwres = new MWResults(p_data);
                mwResult = null;
                if (mwres != null && mwres.count > 0)
                {
                    mwResult = mwres.getResult(0);

                    // with parser
                    if (MWPARSER_MASK != Scanner.MWP_PARSER_MASK_NONE && !(MWPARSER_MASK == Scanner.MWP_PARSER_MASK_GS1 && !mwResult.isGS1))
                    {
                        double parserRes = -1;
                        byte[] pp_data   = new byte[10000];

                        if (mwResult != null && mwResult.bytesLength > 4 || (mwResult != null && mwResult.bytesLength > 0 && mwResult.type != Scanner.FOUND_39 && mwResult.type != Scanner.FOUND_25_INTERLEAVED && mwResult.type != Scanner.FOUND_25_STANDARD))
                        {
                            parserRes = BarcodeLib.Scanner.MWPgetJSON(MWPARSER_MASK, System.Text.Encoding.UTF8.GetBytes(mwResult.encryptedResult), pp_data);

                            if (parserRes >= 0)
                            {
                                mwResult.text = Encoding.UTF8.GetString(pp_data, 0, pp_data.Length);

                                int index = mwResult.text.IndexOf('\0');
                                if (index >= 0)
                                {
                                    mwResult.text = mwResult.text.Remove(index);
                                }
                            }
                        }
                    }
                }
            }

            return(mwResult);
        }
コード例 #4
0
        private void bw_DoWork(object sender, DoWorkEventArgs e)
        {
            Byte[]           result = new Byte[10000];
            BackgroundWorker worker = sender as BackgroundWorker;

            ThreadArguments ta = e.Argument as ThreadArguments;

            int resLen = Scanner.MWBscanGrayscaleImage(ta.pixels, ta.width, ta.height, result);

            //ignore positive result if closing is in progress
            if (isClosing)
            {
                resLen = -1;
            }

            if (resLen > 0 && resultDisplayed)
            {
                resLen = -1;
            }

            MWResult mwResult = null;

            if (resLen > 0 && Scanner.MWBgetResultType() == Scanner.MWB_RESULT_TYPE_MW)
            {
                MWResults results = new MWResults(result);

                if (results.count > 0)
                {
                    mwResult = results.getResult(0);
                    result   = mwResult.bytes;
                }
            }

            if (lastTime != null && lastTime.Ticks > 0)
            {
                long timePrev       = lastTime.Ticks;
                long timeNow        = DateTime.Now.Ticks;
                long timeDifference = (timeNow - timePrev) / 10000;
                //System.Diagnostics.Debug.WriteLine("frame time: {0}", timeDifference);
            }

            lastTime = DateTime.Now;
            //ignore results shorter than 4 characters for barcodes with weak checksum
            if (mwResult != null && mwResult.bytesLength > 4 || (mwResult != null && mwResult.bytesLength > 0 && mwResult.type != Scanner.FOUND_39 && mwResult.type != Scanner.FOUND_25_INTERLEAVED && mwResult.type != Scanner.FOUND_25_STANDARD))
            {
                Scanner.MWBsetDuplicate(mwResult.bytes, mwResult.bytesLength);
                resultDisplayed = true;
                String typeName = BarcodeHelper.getBarcodeName(mwResult);

                Deployment.Current.Dispatcher.BeginInvoke(delegate()
                {
                    BarcodeHelper.scannerResult = new ScannerResult();

                    BarcodeHelper.resultAvailable     = true;
                    BarcodeHelper.scannerResult.code  = mwResult.text;
                    BarcodeHelper.scannerResult.type  = BarcodeHelper.getBarcodeName(mwResult);
                    BarcodeHelper.scannerResult.isGS1 = mwResult.isGS1;
                    if (mwResult.locationPoints != null)
                    {
                        BarcodeHelper.scannerResult.location = "{\"p1\":{\"x\":" + floatToStrDot(mwResult.locationPoints.p1.x) + ", \"y\":" + floatToStrDot(mwResult.locationPoints.p1.y) + "},"
                                                               + "\"p2\":{\"x\":" + floatToStrDot(mwResult.locationPoints.p2.x) + ", \"y\":" + floatToStrDot(mwResult.locationPoints.p2.y) + "},"
                                                               + "\"p3\":{\"x\":" + floatToStrDot(mwResult.locationPoints.p3.x) + ", \"y\":" + floatToStrDot(mwResult.locationPoints.p3.y) + "},"
                                                               + "\"p4\":{\"x\":" + floatToStrDot(mwResult.locationPoints.p4.x) + ", \"y\":" + floatToStrDot(mwResult.locationPoints.p4.y) + "}}";
                    }
                    else
                    {
                        BarcodeHelper.scannerResult.location = "false";
                    }

                    BarcodeHelper.scannerResult.imageWidth  = mwResult.imageWidth;
                    BarcodeHelper.scannerResult.imageHeight = mwResult.imageHeight;

                    Byte[] binArray = new Byte[mwResult.bytesLength];
                    for (int i = 0; i < mwResult.bytesLength; i++)
                    {
                        binArray[i] = mwResult.bytes[i];
                    }


                    BarcodeHelper.scannerResult.bytes = binArray;

                    stopCamera();

                    string resultString = "{\"code\":" + JsonHelper.Serialize(BarcodeHelper.scannerResult.code) + ","
                                          + "\"type\":" + JsonHelper.Serialize(BarcodeHelper.scannerResult.type) + ","
                                          + "\"bytes\":" + JsonHelper.Serialize(BarcodeHelper.scannerResult.bytes) + ","
                                          + "\"isGS1\":" + JsonHelper.Serialize(BarcodeHelper.scannerResult.isGS1) + ","
                                          + "\"location\":" + BarcodeHelper.scannerResult.location + ","
                                          + "\"imageWidth\":" + BarcodeHelper.scannerResult.imageWidth + ","
                                          + "\"imageHeight\":" + BarcodeHelper.scannerResult.imageHeight
                                          + "}";
                    PluginResult pResult = new PluginResult(PluginResult.Status.OK, resultString);
                    pResult.KeepCallback = true;
                    MWBarcodeScanner.mwbScanner.DispatchCommandResult(pResult, MWBarcodeScanner.kallbackID);
                    if (param_CloseScannerOnDecode)
                    {
                        isClosing = true;
                        if (isPage)
                        {
                            NavigationService.GoBack();
                        }
                        else
                        {
                            MWBarcodeScanner.mwbScanner.stopScanner("");
                        }
                        resultDisplayed = false;
                    }

                    isProcessing = false;
                });
            }
            else
            {
                isProcessing = false;
            }
            activeThreads--;
        }
コード例 #5
0
        private async void FindCodes(byte[] data, int width, int height)
        {
            byte[] bytes = new byte[data.Length / 4];
            System.Diagnostics.Debug.WriteLine("Refining Data ({0}. {1}, {2})", data.Length, width, height);
            for (int i = 0; i < bytes.Length; i++)
            {
                bytes[i] = data[i * 4];
            }

            System.Diagnostics.Debug.WriteLine("Finding Codes {0}", _Threads);
            byte[] resultData = new byte[10000];

            int result = BarcodeLib.Scanner.MWBscanGrayscaleImage(bytes, Convert.ToInt32(width), Convert.ToInt32(height), resultData);

            if ((result < 0) || _Done)
            {
                System.Diagnostics.Debug.WriteLine("Scan Result: {0} - Fail", result);
                resultData = null;
                _Threads--;
                return;
            }

            string resultText = string.Empty;
            var    type       = BarcodeLib.Scanner.MWBgetResultType();

            System.Diagnostics.Debug.WriteLine("Scan Result type: {0}", type);
            if (BarcodeLib.Scanner.MWBgetResultType() < 0)
            {
                System.Diagnostics.Debug.WriteLine("Scan Result - Fail: {0}", type);
                resultData = null;
                _Threads--;
                return;
            }
            if (type == 2)
            {
                MWResults results = new MWResults(resultData);
                if (results.count == 0)
                {
                    var s = System.Text.Encoding.UTF8.GetString(resultData, 0, resultData.Length);
                    System.Diagnostics.Debug.WriteLine("No Data.");
                    System.Diagnostics.Debug.WriteLine(s);
                    resultData = null;
                    _Threads--;
                    return;
                }
                MWResult scanResult = results.getResult(0);
                resultText = scanResult.text;
                scanResult = null;
            }
            else
            {
                resultText = System.Text.Encoding.UTF8.GetString(resultData, 0, resultData.Length);
            }

            //  return the result
            if (!string.IsNullOrEmpty(resultText))
            {
                _Done = true;

                if (_CodesFound != null)
                {
                    Utilities.Dispatch(() =>
                    {
                        ScanResults = DecodeScan(resultText);
                        _CodesFound(ScanResults);
                    });
                }
                else if (_DataFound != null)
                {
                    Utilities.Dispatch(() =>
                    {
                        _DataFound(resultData);
                    });
                }
            }
            resultData = null;
            _Threads--;
        }