2011-11-03 3 views
4

Je utilise un SDK Zbar et je veux scanner QR code et code à barres dans mon cadre de définition, mais il est en train de numériser n'importe quelle partie de l'écran pas dans mon cadre défini alors où je fais erreur? Je veux numériser comme ça dans mon cadre défini.
http://www.visionsmarts.com/products/VSBarcodeReader/VSBarcodeReader.htmlcomment définir cadre d'analyse dans SDK zbar?

Voici mon code.

-(void)displayMe{ 


ZBarReaderViewController *reader = [ZBarReaderViewController new]; 
reader.readerDelegate = self; 

reader.showsZBarControls=NO; 

//////////////black area///////////////////////// 

UIImage *image1 = [UIImage imageNamed:@"blackscreen.png"]; 
UIImageView *imageLogo1 = [[UIImageView alloc] initWithImage:image1]; 
imageLogo1.frame = CGRectMake(0, 0, 320, 480); 

cancelLabel =[[UILabel alloc]initWithFrame:CGRectMake(0,420, 320, 60)]; 
cancelLabel.backgroundColor = [UIColor blackColor]; 


UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; 
[btn setFrame:CGRectMake(100,420, 100, 60)]; 
[btn setTitle:@"Cancel" forState:UIControlStateNormal]; 
btn.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:18]; 
btn.backgroundColor=[UIColor blackColor]; 
[btn addTarget:self action:@selector(back) 
forControlEvents:UIControlEventTouchUpInside]; 


[cancelLabel bringSubviewToFront:btn]; 
[imageLogo1 addSubview:cancelLabel]; 
[imageLogo1 setUserInteractionEnabled:YES]; 
[imageLogo1 addSubview:btn]; 
//reader.cameraOverlayView = btn; 


///////////////line///////////////////////////// 
UIImage *image = [UIImage imageNamed:@"[email protected]"]; 
UIImageView *imageLogo = [[UIImageView alloc] initWithImage:image]; 
imageLogo.frame = CGRectMake(40, 240, 230, 10); 
[imageLogo1 addSubview:imageLogo]; 

///////////////Configure reader/////////////////////////////// 
reader.cameraOverlayView = imageLogo1; 

//reader.cameraOverlayView.frame=CGRectMake(40, 240, 230, 30); 

//imageLogo.frame = CGRectMake(0, 0, image.size.width, image.size.height); 


//imageLogo.center = CGRectMake(320/2, 460/2, image.size.width, image.size.height); 

ZBarImageScanner *scanner = reader.scanner; 

[scanner setSymbology: ZBAR_I25 
       config: ZBAR_CFG_ENABLE 
        to: 1]; 


ZBarCaptureReader *cap=[[ZBarCaptureReader alloc]init]; 

//cap.scanCrop=CGRectMake(300, 400, 230, 200); 

cap.scanCrop=CGRectMake(100, 160, 50,60); 
//cap.cameraOverlayView.frame=CGRectMake(40, 240, 230, 30); 


[self presentModalViewController: reader 
         animated: YES]; 
[reader release]; 
+0

J'ai une question @Furqi, à quoi ressemble votre black screen.png par hasard? – Alioo

Répondre

4

Créez un objet UIVIew (par exemple, scanView) et définissez-le comme zone de personnalisation. Où vous voulez obtenir la zone de numérisation, il devrait y avoir une zone transparente ou En image transparente.

utilisent ce

reader.cameraOverlayView = scanView; 

également désactiver à tout mode sauf le mode Portrait.

reader.supportedOrientationsMask = ZBarOrientationMask(UIInterfaceOrientationPortrait); 

Complet, par ex. Code

Dans le fichier MyScanCode.h

{ZBarReaderViewController *reader;} 
@property (nonatomic, strong) IBOutlet UIView *scanView; 

Dans le fichier MyScanCode.m

- (void) readCode{ 
    reader = [ZBarReaderViewController new]; 

    reader.readerDelegate = self; 
    reader.supportedOrientationsMask = ZBarOrientationMask(UIInterfaceOrientationPortrait); 

    #if !(TARGET_IPHONE_SIMULATOR)  
     reader.cameraOverlayView = scanView; 
     reader.showsZBarControls = NO; 
    #endif 

    reader.wantsFullScreenLayout = NO; 
    ZBarImageScanner *scanner = reader.scanner; 

    [scanner setSymbology:ZBAR_I25 config: ZBAR_CFG_ENABLE to: 0]; 
    [self presentModalViewController:reader animated:NO]; 

} 
+0

pouvez-vous montrer comment cela pourrait être fait pour les orientations du paysage, dans Ipad? – hacker

+0

reader.supportedOrientationsMask = ZBarOrientationMask (UIInterfaceOrientationPortrait || UIInterfaceOrientationLandscapeLeft); et de changer l'orientation selon la vue et le code dans le viewController où vous présentez ce ZBar – dayitv89

+0

quand je fais cela je ne reçois pas la mise en page complète.l'écran est seulement demi-coupe à la fois sur les côtés et aussi souffler? cette? – hacker

2

Au lieu d'utiliser ZBarReaderViewController, essayez d'utiliser ZBarReaderView. Cela a fonctionné pour moi et a sauvé mon temps. J'espère que cela vous aide.

ZBarReaderView*reader = [ZBarReaderView new]; 
ZBarImageScanner * scanner = [ZBarImageScanner new]; 
[scanner setSymbology: ZBAR_I25 
       config: ZBAR_CFG_ENABLE 
        to: 0]; 
reader = [reader initWithImageScanner:scanner]; 
reader.readerDelegate = self; 
reader.tracksSymbols = YES; 
reader.frame = CGRectMake(20, 126-88, 283, 347); 
reader.torchMode = 0; 
dispatch_async(dispatch_get_main_queue(), ^{[reader start];}); 

[self.view addSubview:reader]; 
Questions connexes