? En mi aplicación, tengo una función de "Capture from Camera", estoy utilizando GPUImageFramework por Brad Larson (ty), GPUImageStillCamera cuando capturo imágenes fijas.¿Cómo puedo calcular el tamaño de recorte (rect) del UIImage con una resolución diferente
stillCamera = [[GPUImageStillCamera alloc] initWithSessionPreset:AVCaptureSessionPresetPhoto cameraPosition:
AVCaptureDevicePositionBack];
como puede ver. el valor preestablecido de la sesión es AVCaptureSessionPresetPhoto
que en el iPhone 4 me da una salida de 1529x2048 y con el dispositivo 4s (8mp) me da 2448x3264.
la siguiente imagen es cómo uso la GPUStillCamera. aquí, hay un rectángulo que es en este caso, el recorte de la imagen capturada.
fragmento de código cuando capture la imagen.
- (IBAction)takePhoto:(id)sender
{
[stillCamera capturePhotoAsJPEGProcessedUpToFilter:filter withCompletionHandler:^(NSData *processedJPEG, NSError *error){
//1529x2048 when iPhone 4 and 2448x3265 when on 4s
UIImage *rawImage = [[UIImage alloc]initWithCGImage:[[UIImage imageWithData:processedJPEG]CGImage]scale:1.0 orientation:UIImageOrientationUp];
**CGRect rect = CGRect{?,?,?,?};**
UIImage *imageFromRect = [rawImage imageAtRect:rect ];
}
Mi pregunta aquí es. ¿Cómo puedo saber los puntos (x, y, w, h) que puedo pasar al método imageAtRect
que dibujará una subimagen desde el rawImage
? y recibirá únicamente la porción de imagen dentro del rectángulo (sin tener en cuenta la resolución de la imagen capturada) como se muestra en la pantalla de arriba? ¿Debería hacerlo manualmente o hay alguna técnica matemática que pueda sugerir?
Gracias!
Si está utilizando GPUImage de todos modos, mire el GPUImageCropFilter. Será recortar utilizando una imagen espacio de coordenadas con un valor que va de 0,0 a 1,0, es decir: con independencia del tamaño de la imagen –
Paul hace un buen punto. El GPUImageCropFilter utiliza un sistema de coordenadas normalizadas, por lo que recorta un rectángulo que es independiente de la resolución de la imagen de entrada y maneja el cálculo resolución de salida para usted. –
Lo he visto y sí, funciona como ustedes dijeron aquí :) gracias. – janusbalatbat