2011-08-07 10 views
8

Estoy usando ZBar SDK para iPhone para escanear un código de barras. Quiero que el lector escanee solo un rectángulo específico en lugar de toda la vista, para hacerlo es necesario establecer la propiedad scanCrop del lector en el rectángulo deseado.¿Cómo uso la propiedad scanCrop de un lector ZBar?

Estoy teniendo dificultades para entender el parámetro rectangular que se debe establecer.

¿Puede alguien decirme qué rect debería dar como argumento si en la vista de retrato sus coordenadas serían: CGRectMake(A, B, C, D)?

Respuesta

23

de ZBarReaderView Class documentation la Zbar:

CGRect scanCrop

La región de la imagen de vídeo que se digitalizará de, en imagen normalizada coordenadas. Tenga en cuenta que la imagen de vídeo es en modo horizontal (por defecto {{0, 0}, {1, 1}})

Las coordenadas de todos los argumentos se encuentra en un flotador normalizado, que es de 0 - 1 Entonces, en valor normalizado, theView.width es 1.0, y theView.height es 1.0. Por lo tanto, el rect predeterminado es {{0,0}, {1,1}}.

Así, por ejemplo, si tengo un UIView transparente llamado scanView como región de escaneo para mi readerView. En lugar de hacer:

readerView.scanCrop = scanView.frame; 

que deberíamos hacer esto, normalizando cada argumentos primera:

CGFloat x,y,width,height; 
x = scanView.frame.origin.x/readerView.bounds.size.width; 
y = scanView.frame.origin.y/readerView.bounds.size.height; 
width = scanView.frame.size.width/readerView.bounds.size.width; 
height = scanView.frame.size.height/readerView.bounds.size.height; 

readerView.scanCrop = CGRectMake(x, y, width, height); 

Funciona para mí. Espero que ayude.

+1

Me gustaría poder upvote que dos veces, gracias! – chourobin

+1

Si su lector va a estar en vertical en lugar de horizontal, consulte [esta publicación] (http://stackoverflow.com/a/11732752/542400) – AMayes

3

Puede usar el área de recorte de escaneo haciendo esto. reader.scanCrop = CGRectMake(x,y,width,height); por ej. reader.scanCrop = CGRectMake(.25,0.25,0.5,0.45); Utilicé esto y funciona para mí.

1

¡¡¡vamos !!! esta es la forma correcta de ajustar el área de recorte;

Había perdido mucho tiempo en eso;

readerView.scanCrop = [self getScanCrop:cropRect readerViewBounds:contentView.bounds]; - (CGRect)getScanCrop:(CGRect)rect readerViewBounds:(CGRect)rvBounds{ CGFloat x,y,width,height; x = rect.origin.y/rvBounds.size.height; y = 1 - (rect.origin.x + rect.size.width)/rvBounds.size.width; width = rect.size.height/rvBounds.size.height; height = rect.size.width/rvBounds.size.width; return CGRectMake(x, y, width, height); }

Cuestiones relacionadas