亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dmtxregion.c

?? data matrix 生成、解析、攝像頭自動識別源碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
}/** * XXX * * @param * @return XXX */static intEdgeScanNextEdge(DmtxEdgeScan *edgeScan, DmtxDecode *decode, DmtxGradient *gradient){   int pxlOffset;   float lower, upper;   if(edgeScan->edge.offset == edgeScan->range.lastPos)      return DMTX_END_OF_RANGE;   while(edgeScan->edge.offset != edgeScan->range.lastPos) {      edgeScan->edge = edgeScan->edgeNext;      (edgeScan->edgeNext.offset)++;      // XXX pretty ugly test... should happen as part of structure with no test needed      if(edgeScan->edge.offset == edgeScan->range.firstPos) {         pxlOffset = dmtxImageGetOffset(&(decode->image), edgeScan->range.dir,               edgeScan->range.lineNbr, edgeScan->edge.offset);         dmtxColor3FromPixel(&(edgeScan->edge.color), &(decode->image.pxl[pxlOffset]));         edgeScan->edge.t = dmtxDistanceAlongRay3(&(gradient->ray), &(edgeScan->edge.color));      }      pxlOffset = dmtxImageGetOffset(&(decode->image), edgeScan->range.dir,            edgeScan->range.lineNbr, edgeScan->edgeNext.offset);      dmtxColor3FromPixel(&(edgeScan->edgeNext.color), &(decode->image.pxl[pxlOffset]));      edgeScan->edgeNext.t = dmtxDistanceAlongRay3(&(gradient->ray), &(edgeScan->edgeNext.color));      // XXX This test should not be necessary, but loop boundaries are currently sketchy      if(dmtxDistanceFromRay3(&(gradient->ray), &(edgeScan->edgeNext.color)) > 10.0)         return DMTX_END_OF_RANGE;      lower = gradient->tMid - edgeScan->edge.t;      upper = gradient->tMid - edgeScan->edgeNext.t;      // edge and edgeNext have the same color      if(fabs(lower - upper) < DMTX_ALMOST_ZERO) {         continue;      }      // Boundary color falls between edge and edgeNext      else if(lower * upper <= 0) {         edgeScan->subPixelOffset = lower / (lower - upper);         if(decode && decode->crossScanCallback)            (*(decode->crossScanCallback))(&(edgeScan->range), gradient, edgeScan);         return DMTX_SUCCESS;      }   }   if(decode && decode->crossScanCallback)      (*(decode->crossScanCallback))(&(edgeScan->range), gradient, edgeScan);   return DMTX_SUCCESS;}/** * XXX * * @param follow   XXX * @param edgeScan XXX * @param gradient XXX * @param dir      XXX * @return XXX */static voidEdgeFollowerInit(DmtxEdgeFollower *follow, DmtxEdgeScan *edgeScan, DmtxGradient *gradient, DmtxDirection dir){   memset(follow, 0x00, sizeof(DmtxEdgeFollower));   follow->slope = (edgeScan->edgeNext.t > edgeScan->edge.t) ? 1 : -1;   follow->paraOffset = edgeScan->range.lineNbr;   follow->perpOffset = edgeScan->edge.offset + edgeScan->subPixelOffset;   follow->tMin = gradient->tMin;   follow->tMid = gradient->tMid;   follow->tMax = gradient->tMax;   follow->ray = gradient->ray;   follow->dir = dir;}/** * XXX * * @param follow XXX * @return XXX */static DmtxVector2EdgeFollowerGetLoc(DmtxEdgeFollower *follow){   DmtxVector2 loc;   if(follow->dir & DmtxDirVertical) {      loc.X = follow->perpOffset;      loc.Y = follow->paraOffset;   }   else {      loc.X = follow->paraOffset;      loc.Y = follow->perpOffset;   }   return loc;}/** * XXX * * @param follow XXX * @param decode XXX * @return XXX */static intEdgeFollowerFollow(DmtxEdgeFollower *follow, DmtxDecode *decode){   // initialize line0 and line1 to "unset" and zero strength   int i;   int anchorStrength = 0;   float offPath, offAngle;   DmtxVector2 vTmp, anchorStep, fStep[DMTX_FOLLOW_STEPS];   DmtxRay2 rayAnchor, rayNext;   memset(&(follow->line0), 0x00, sizeof(DmtxRay2));   memset(&(follow->line1), 0x00, sizeof(DmtxRay2));   // Build first vector by incrementing 5 steps   anchorStep = fStep[0] = EdgeFollowerGetLoc(follow);   for(i = 1; i < DMTX_FOLLOW_STEPS; i++) {      if(EdgeFollowerIncrement(follow, decode) != DMTX_EDGE_FOUND) {         if(decode && decode->plotPointCallback)            (*(decode->plotPointCallback))(EdgeFollowerGetLoc(follow), 1, 2, DMTX_DISPLAY_SQUARE);         return 0; // Lost edge before completing first vector      }      fStep[i] = EdgeFollowerGetLoc(follow);   }   dmtxVector2Sub(&vTmp, &(fStep[DMTX_FOLLOW_STEPS-1]), &(fStep[0]));   dmtxVector2Norm(&vTmp); // XXX potential problem here if follower ends up in starting point (div/0)   rayAnchor.p = fStep[0];   rayAnchor.v = vTmp;   // Continue while we can still find an edge   while(EdgeFollowerIncrement(follow, decode) == DMTX_EDGE_FOUND) {      if(follow->turnCount > 2) { // Reached maximum number of turns         if(decode && decode->plotPointCallback) // Plot a red X where edge was lost            (*(decode->plotPointCallback))(fStep[0], 1, 2, DMTX_DISPLAY_SQUARE);          return 0; // XXX this should probably reflect the edge status (e.g. lost, max_turns, etc...)      }      // incrementProgress(follow, anchorVector); (using current followVector)      for(i = 0; i < DMTX_FOLLOW_STEPS - 1; i++) {         fStep[i] = fStep[i+1]; // XXX innefficient, but simple      }      fStep[i] = EdgeFollowerGetLoc(follow);      dmtxVector2Sub(&vTmp, &(fStep[DMTX_FOLLOW_STEPS-1]), &(fStep[0]));      dmtxVector2Norm(&vTmp);      rayNext.p = fStep[0];      rayNext.v = vTmp;      offPath = fabs(dmtxDistanceFromRay2(&rayAnchor, &(fStep[0])));      offAngle = fabs(dmtxVector2Dot(&(rayAnchor.v), &(rayNext.v)));      // Step is in direction of predicted path      if(offAngle > 0.984) {         anchorStrength++;      }      else { // Step is in wrong direction         // Current line is done -- fixate         if(anchorStrength > 10) { // if line reached strength threshhold, but is now turning a corner            // line0 gets set first            if(follow->line0.isDefined == 0) {               if(decode && decode->plotPointCallback)                  (*(decode->plotPointCallback))(fStep[0], 2, 2, DMTX_DISPLAY_SQUARE);               // Update should build ray based on min/max points on the edge, NOT anchorVector               // XXXXXXXXX IMPORTANT: Revisit this... results should be adequate using anchorVector here               follow->line0.isDefined = 1;               dmtxVector2Sub(&vTmp, &(fStep[0]), &anchorStep);               dmtxVector2Norm(&vTmp);               follow->line0.v = vTmp;               follow->line0.p = anchorStep;               follow->line0.tMin = 0;               follow->line0.tMax = dmtxDistanceAlongRay2(&(follow->line0), &(fStep[0]));            }            // line1 gets set if line0 is already set            else {               if(decode && decode->plotPointCallback)                  (*(decode->plotPointCallback))(fStep[0], 3, 2, DMTX_DISPLAY_SQUARE);               // Update should build ray based on min/max points on the edge, NOT anchorVector               // XXXXXXXXX IMPORTANT: Revisit this... results should be adequate using anchorVector here               follow->line1.isDefined = 1;               dmtxVector2Sub(&vTmp, &(fStep[0]), &anchorStep);               dmtxVector2Norm(&vTmp);               follow->line1.v = vTmp;               follow->line1.p = anchorStep;               follow->line1.tMin = 0;               follow->line1.tMax = dmtxDistanceAlongRay2(&(follow->line1), &(fStep[0]));               return 0; // return "full"            }         }         else {            // line never reached strength threshhold            if(decode && decode->plotPointCallback)               (*(decode->plotPointCallback))(fStep[0], 4, 2, DMTX_DISPLAY_SQUARE);         }         rayAnchor = rayNext;         anchorStep = fStep[0];         anchorStrength = 0;      }   }   // return edge_lost condition (range/right/left)   if(decode && decode->plotPointCallback)      (*(decode->plotPointCallback))(EdgeFollowerGetLoc(follow), 5, 2, DMTX_DISPLAY_SQUARE);   return 0;}/** * XXX * * @param * @return XXX */static intEdgeFollowerIncrement(DmtxEdgeFollower *follow, DmtxDecode *decode){   int turnDir;   int increment;   int offset0, offset1, endOffset;   int dir;   float t0, t1;   float tmpOffset;   DmtxColor3 color0, color1;   // XXX this first calc of offset0 might be done smarter by extrapolating current "line"   offset0 = (int)(follow->perpOffset + 0.5);   if(((follow->dir & DmtxDirHorizontal) && (offset0 + 1 >= decode->image.height - 1)) ||         ((follow->dir & DmtxDirVertical) && (offset0 + 1 >= decode->image.width - 1)) ||         offset0 - 1 <= 0)      return DMTX_END_OF_RANGE;   increment = (follow->dir & DmtxDirRightUp) ? 1 : -1;   follow->paraOffset += increment;   if(((follow->dir & DmtxDirHorizontal) && (follow->paraOffset >= decode->image.width)) ||         ((follow->dir & DmtxDirVertical) && (follow->paraOffset >= decode->image.height)) ||         follow->paraOffset <= 0)      return DMTX_END_OF_RANGE;   if(follow->dir & DmtxDirVertical)      dmtxColor3FromPixel(&color0, &(decode->image.pxl[decode->image.width * follow->paraOffset + offset0]));   else      dmtxColor3FromPixel(&color0, &(decode->image.pxl[decode->image.width * offset0 + follow->paraOffset]));   t0 = dmtxDistanceAlongRay3(&(follow->ray), &color0);   dir = (follow->slope * (follow->tMid - t0) >= 0) ? 1 : -1;   // Find adjacent pixels whose values "surround" tMid   endOffset = offset0 + 3*dir;   for(offset1 = offset0; offset1 != endOffset; offset1 += dir) {      if(((follow->dir & DmtxDirHorizontal) && (offset1 + 1 >= decode->image.height - 1)) ||            ((follow->dir & DmtxDirVertical) && (offset1 + 1 >= decode->image.width - 1)) ||            offset1 - 1 <= 0)         return DMTX_END_OF_RANGE;      if(follow->dir & DmtxDirVertical)         dmtxColor3FromPixel(&color1, &(decode->image.pxl[decode->image.width * follow->paraOffset + offset1]));      else         dmtxColor3FromPixel(&color1, &(decode->image.pxl[decode->image.width * offset1 + follow->paraOffset]));      t1 = dmtxDistanceAlongRay3(&(follow->ray), &color1);      // Check that follower hasn't wandered off of edge following unlike colors      if(dmtxDistanceFromRay3(&(follow->ray), &color1) > DMTX_MAX_COLOR_DEVN) {         return DMTX_END_OF_RANGE; // XXX not really DMTX_END_OF_RANGE, but works for now      }      if(fabs(t1 - follow->tMid) < DMTX_ALMOST_ZERO ||            ((follow->tMid - t0) * (follow->tMid - t1) < 0)) {         if(fabs(t1 - follow->tMid) < DMTX_ALMOST_ZERO) {            follow->perpOffset = offset1;         }         else if(fabs(follow->tMid - t0) < fabs(follow->tMid - t1)) {            follow->perpOffset = offset0 + follow->slope * ((follow->tMid - t0)/fabs(t0 - t1));         }         else {            follow->perpOffset = offset1 + follow->slope * ((follow->tMid - t1)/fabs(t0 - t1));         }         if(decode && decode->followScanCallback)            (*(decode->followScanCallback))(follow);         return DMTX_EDGE_FOUND;      }      else {         offset0 = offset1;         t0 = t1;      }   }   tmpOffset = follow->paraOffset;   follow->paraOffset = follow->perpOffset;   follow->perpOffset = tmpOffset;   if(follow->dir & (DmtxDirUp | DmtxDirLeft))      turnDir = (dir > 0) ? DMTX_TURN_CW : DMTX_TURN_CCW;   else      turnDir = (dir > 0) ? DMTX_TURN_CCW : DMTX_TURN_CW;   // XXX Whoa, this one was hard to figure out   if(follow->dir & DmtxDirVertical && turnDir == DMTX_TURN_CW)      follow->slope *= -1;   else if(follow->dir & DmtxDirHorizontal && turnDir == DMTX_TURN_CCW)      follow->slope *= -1;   follow->turnCount++;   follow->dir = TurnCorner(follow->dir, turnDir);   return DMTX_EDGE_FOUND;}/** * XXX * * @param * @return XXX */static voidMatrixRegionInit(DmtxMatrixRegion *matrixRegion, DmtxGradient *gradient){   memset(matrixRegion, 0x00, sizeof(DmtxMatrixRegion));   matrixRegion->gradient = *gradient;   // XXX this stuff just became a lot less important since I'm initializing it locally in "chain" and then copying   matrixRegion->chain.tx = 0.0;   matrixRegion->chain.ty = 0.0;   matrixRegion->chain.phi = 0.0;   matrixRegion->chain.shx = 0.0;   matrixRegion->chain.scx = 1.0;   matrixRegion->chain.scy = 1.0;   matrixRegion->chain.bx0 = 100.0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
东方aⅴ免费观看久久av| 欧美日韩一级片网站| 国产精品资源站在线| 久久蜜桃av一区二区天堂| 九一九一国产精品| 久久精品噜噜噜成人88aⅴ| 久久99精品久久久久久动态图| 图片区日韩欧美亚洲| 精品一区二区国语对白| 国产一区二区美女诱惑| 国产成人欧美日韩在线电影| 国产一区在线不卡| 99这里都是精品| 色哟哟一区二区三区| 久久久精品tv| 亚洲一区欧美一区| 视频一区二区三区入口| 奇米精品一区二区三区在线观看| 日本91福利区| 欧美日韩亚洲高清一区二区| 国产精品国产三级国产| 奇米精品一区二区三区在线观看| 国产激情视频一区二区三区欧美| 成人综合婷婷国产精品久久蜜臀| 成人动漫一区二区三区| 久久免费视频一区| 视频一区中文字幕| 91在线丨porny丨国产| 精品免费日韩av| 亚洲激情在线激情| 久久国产欧美日韩精品| 在线精品视频免费播放| 亚洲色图欧美在线| 91香蕉视频污在线| 国产精品区一区二区三区| 国产一区二区毛片| 欧美一区二区日韩| 免费不卡在线观看| 欧美一卡2卡3卡4卡| 亚洲精品成人精品456| caoporen国产精品视频| 欧美精品三级在线观看| 亚洲成人自拍网| 色av一区二区| 热久久一区二区| 亚洲精品在线免费观看视频| 激情偷乱视频一区二区三区| 777午夜精品视频在线播放| 毛片不卡一区二区| 欧美国产日韩亚洲一区| 91啦中文在线观看| 美国av一区二区| 国产亚洲欧美中文| 本田岬高潮一区二区三区| 亚洲丝袜精品丝袜在线| 26uuu国产电影一区二区| av高清久久久| 久久99热这里只有精品| 久久精品网站免费观看| 在线看一区二区| 麻豆91精品视频| 五月天欧美精品| 亚洲欧洲av在线| 久久久久青草大香线综合精品| 不卡影院免费观看| 激情综合网天天干| 久久精品国产免费看久久精品| 一区二区三区中文免费| 欧美mv和日韩mv国产网站| 欧美又粗又大又爽| eeuss影院一区二区三区| 精品一区二区免费视频| 免费观看在线综合| 免费久久99精品国产| 中文欧美字幕免费| 国产精品久久影院| 一区二区三区在线高清| 亚洲已满18点击进入久久| 日韩美女久久久| 国产精品午夜免费| 国产精品美女久久久久久| 国产亚洲女人久久久久毛片| 欧美刺激午夜性久久久久久久 | 欧美精品1区2区| 中文字幕一区二区三区蜜月| 色综合视频在线观看| 成人午夜视频免费看| 91美女蜜桃在线| 欧美性色欧美a在线播放| 欧美手机在线视频| 69堂成人精品免费视频| 精品欧美久久久| 欧美激情在线观看视频免费| 亚洲视频狠狠干| 国产麻豆视频一区二区| 国产精品一区二区x88av| 99riav久久精品riav| 欧美亚州韩日在线看免费版国语版| av激情综合网| 久久男人中文字幕资源站| 一区二区三区日韩精品视频| 久久99国产精品久久99| jvid福利写真一区二区三区| 色域天天综合网| 精品av久久707| 一本大道久久a久久综合| 欧美mv日韩mv国产网站| 亚洲成人第一页| 高清国产午夜精品久久久久久| 欧美成人欧美edvon| 亚洲欧美成人一区二区三区| 国产美女精品人人做人人爽| 欧美丰满少妇xxxxx高潮对白| 国产精品系列在线| 国产精选一区二区三区| 日韩欧美一卡二卡| 韩国三级电影一区二区| 欧美亚洲另类激情小说| 视频在线观看一区| 婷婷一区二区三区| 欧美三区免费完整视频在线观看| 中文字幕在线视频一区| 色婷婷一区二区三区四区| 综合网在线视频| 欧美亚一区二区| 久久99久久久久| 亚洲色图在线看| 91精品综合久久久久久| 国产精品影视网| 亚洲三级久久久| 欧美电视剧免费观看| k8久久久一区二区三区| 日韩精品每日更新| 国产精品乱码一区二三区小蝌蚪| 不卡高清视频专区| 日韩av电影免费观看高清完整版| 国产精品日产欧美久久久久| 国产日韩精品一区| 国产风韵犹存在线视精品| 欧美美女网站色| 精品在线观看视频| 久久久久国产精品厨房| 国产精品99久久久久| 亚洲尤物视频在线| 一个色综合网站| 国产欧美精品一区aⅴ影院| 欧美电视剧免费全集观看| 在线日韩一区二区| 国产成人精品在线看| 一区二区三区精品在线| 精品视频一区三区九区| 成人成人成人在线视频| 国产成人一级电影| 国产aⅴ综合色| 成人精品国产免费网站| 成人sese在线| 北条麻妃国产九九精品视频| 国产成人免费在线观看| aaa国产一区| 欧美日韩国产免费| 在线成人免费观看| 欧美一级电影网站| 日韩一区二区三区观看| 国产三级一区二区| 亚洲一区二区在线免费看| 九九精品一区二区| 成人午夜电影小说| 欧美一二三区在线| 国产欧美一区二区在线| 亚洲日本在线视频观看| 美洲天堂一区二卡三卡四卡视频 | 精品视频一区三区九区| 欧美经典一区二区三区| 日韩经典一区二区| 国产91色综合久久免费分享| 欧美精品123区| 亚洲妇女屁股眼交7| 成人免费观看男女羞羞视频| 国产精品一二二区| 欧美精品xxxxbbbb| 国产片一区二区| 午夜欧美视频在线观看| 日本韩国精品在线| 国产精品久久久久久久久快鸭| 黄色精品一二区| 日韩一级片在线播放| 亚洲成人动漫精品| 91精品国产综合久久精品图片| 一区二区成人在线视频| 成人国产精品视频| 亚洲在线一区二区三区| 91蝌蚪国产九色| 亚洲欧美乱综合| 99久久er热在这里只有精品66| 国产欧美一区二区三区网站 | 国产酒店精品激情| 国产精品久久久99| 欧美日韩国产电影| 另类小说一区二区三区| 欧美岛国在线观看|