コード例 #1
0
        private List <string> DecodeImage(Bitmap image, int maxResultCount, TimeSpan timeOut, bool isMosaic)
        {
            List <string> result = new List <string>();
            int           stride;

            byte[]    rawImg  = ImageToByteArray(image, out stride);
            DmtxImage dmtxImg = new DmtxImage(rawImg, image.Width, image.Height, DmtxPackOrder.DmtxPack24bppRGB);

            dmtxImg.RowPadBytes = stride % 3;
            DmtxDecode decode    = new DmtxDecode(dmtxImg, 1);
            TimeSpan   timeLeft  = new TimeSpan(timeOut.Ticks);
            Stopwatch  stopWatch = new Stopwatch();

            stopWatch.Start();
            while (true)
            {
                if (stopWatch.Elapsed > timeOut)
                {
                    break;
                }
                DmtxRegion region = decode.RegionFindNext(timeOut);
                if (region != null)
                {
                    DmtxMessage msg     = isMosaic ? decode.MosaicRegion(region, -1) : decode.MatrixRegion(region, -1);
                    string      message = Encoding.ASCII.GetString(msg.Output);
                    message = message.Substring(0, message.IndexOf('\0'));
                    if (!result.Contains(message))
                    {
                        result.Add(message);
                        if (result.Count >= maxResultCount)
                        {
                            break;
                        }
                    }
                }
                else
                {
                    break;
                }
            }
            return(result);
        }
コード例 #2
0
 private List<string> DecodeImage(Bitmap image, int maxResultCount, TimeSpan timeOut, bool isMosaic)
 {
     List<string> result = new List<string>();
     int stride;
     byte[] rawImg = ImageToByteArray(image, out stride);
     DmtxImage dmtxImg = new DmtxImage(rawImg, image.Width, image.Height, DmtxPackOrder.DmtxPack24bppRGB);
     dmtxImg.RowPadBytes = stride % 3;
     DmtxDecode decode = new DmtxDecode(dmtxImg, 1);
     TimeSpan timeLeft = new TimeSpan(timeOut.Ticks);
     Stopwatch stopWatch = new Stopwatch();
     stopWatch.Start();
     while (true)
     {
         if (stopWatch.Elapsed > timeOut)
         {
             break;
         }
         DmtxRegion region = decode.RegionFindNext(timeOut);
         if (region != null)
         {
             DmtxMessage msg = isMosaic ? decode.MosaicRegion(region, -1) : decode.MatrixRegion(region, -1);
             string message = Encoding.ASCII.GetString(msg.Output);
             message = message.Substring(0, message.IndexOf('\0'));
             if (!result.Contains(message))
             {
                 result.Add(message);
                 if (result.Count >= maxResultCount)
                 {
                     break;
                 }
             }
         }
         else
         {
             break;
         }
     }
     return result;
 }