123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- //
- // RectManager.m
- // BankCard
- //
- // Created by XAYQ-FanXL on 16/7/8.
- // Copyright © 2016年 AN. All rights reserved.
- //
- #import "RectManager.h"
- char numbers[256];
- CGRect rects[64];
- @implementation RectManager
- + (CGRect)getEffectImageRect:(CGSize)size {
- CGSize size2 = [UIScreen mainScreen].bounds.size;
- CGPoint point;
- if(size.width/size.height > size2.width/size2.height) {
- float oldW = size.width;
- size.width = size2.width / size2.height * size.height;
- point.x = (oldW - size.width)/2;
- point.y = 0;
- }
- else {
- float oldH = size.height;
- size.height = size2.height / size2.width * size.width;
- point.x = 0;
- point.y = (oldH - size.height)/2;;
- }
- return CGRectMake(point.x, point.y, size.width, size.height);
- }
- + (CGRect)getGuideFrame:(CGRect)rect {
- float previewWidth = rect.size.height;
- float previewHeight = rect.size.width;
-
- float cardh, cardw;
- float left, top;
-
- cardw = previewWidth*70/100;
- //if(cardw < 720) cardw = 720;
- if(previewWidth < cardw)
- cardw = previewWidth;
-
- cardh = (int)(cardw / 0.63084f);
-
- left = (previewWidth-cardw)/2;
- top = (previewHeight-cardh)/2;
-
- return CGRectMake(top+rect.origin.x, left+rect.origin.y, cardh, cardw);
- }
- + (int)docode:(unsigned char *)pbBuf len:(int)tLen {
- int hic, lwc;
- int i, j, code;
- int x, y, w, h;
- int charCount = 0;
-
- int charNum = 0;
- char szBankName[128];
-
- //字符解析,包含空格
- i = 0;
- hic = pbBuf[i++]; lwc = pbBuf[i++]; code = (hic<<8)+lwc;
- hic = pbBuf[i++]; lwc = pbBuf[i++]; code = (hic<<8)+lwc;
-
- //bank name, GBK CharSet;
- for(j = 0; j < 64; ++j) { szBankName[j] = pbBuf[i++]; }
-
- //charNum
- hic = pbBuf[i++]; lwc = pbBuf[i++]; code = (hic<<8)+lwc;
- charNum = code;
-
- //char code and its rect
- while(i < tLen-9){
- //字符的编码unsigned short
- hic = pbBuf[i++]; lwc = pbBuf[i++]; x = (hic<<8)+lwc;
- numbers[charCount] = (char)x;
- //字符的矩形框lft, top, w, h
- hic = pbBuf[i++]; lwc = pbBuf[i++]; x = (hic<<8)+lwc;
- hic = pbBuf[i++]; lwc = pbBuf[i++]; y = (hic<<8)+lwc;
- hic = pbBuf[i++]; lwc = pbBuf[i++]; w = (hic<<8)+lwc;
- hic = pbBuf[i++]; lwc = pbBuf[i++]; h = (hic<<8)+lwc;
- rects[charCount] = CGRectMake(x, y, w, h);
- charCount++;
- }
- numbers[charCount] = 0;
-
- if(charCount < 10 || charCount > 24 || charNum != charCount){
- charCount = 0;
- }
- return charCount;
- }
- + (CGRect)getCorpCardRect:(int)width height:(int)height guideRect:(CGRect)guideRect charCount:(int) charCount {
- CGRect subRect = rects[0];
-
- int i;
- int nAvgW = 0;
- int nAvgH = 0;
- int nCount = 0;
- nAvgW = rects[0].size.width;
- nAvgH = rects[0].size.height;
- nCount = 1;
- //所有非空格的字符的矩形框合并
- for(i = 1; i < charCount; ++i){
-
- subRect = combinRect(subRect, rects[i]);
- if(numbers[i] != ' '){
- nAvgW += rects[i].size.width;
- nAvgH += rects[i].size.height;
- nCount ++;
- }
- }
- //统计得到的平均宽度和高度
- nAvgW /= nCount;
- nAvgH /= nCount;
-
- //releative to the big image(相对于大图)
- subRect.origin.x = subRect.origin.x + guideRect.origin.x;
- subRect.origin.y = subRect.origin.y + guideRect.origin.y;
- // rect.offset(guideRect.left, guideRect.top);
- //做一个扩展
- subRect.origin.y -= nAvgH; if(subRect.origin.y < 0) subRect.origin.y = 0;
- subRect.size.height += nAvgH * 2; if(subRect.size.height+subRect.origin.y >= height) subRect.size.height = height-subRect.origin.y-1;
- subRect.origin.x -= nAvgW; if(subRect.origin.x < 0) subRect.origin.x = 0;
- subRect.size.width += nAvgW * 2; if(subRect.size.width+subRect.origin.x >= width) subRect.size.width = width-subRect.origin.x-1;
- return subRect;
- }
- + (char *)getNumbers {
- return numbers;
- }
- CGRect combinRect(CGRect A, CGRect B)
- {
- CGFloat t,b,l,r;
- l = fminf(A.origin.x, B.origin.x);
- r = fmaxf(A.size.width+A.origin.x, B.size.width+B.origin.x);
- t = fminf(A.origin.y, B.origin.y);
- b = fmaxf(A.size.height+A.origin.y, B.size.height+B.origin.y);
-
- return CGRectMake(l, t, r-l, b-t);
- }
- @end
|