private static async Task CropImageFile(StorageFile imageFile, Size imageSize, CropMethod method, Size screenSize, IBuffer previewBuffer) { switch (method) { case CropMethod.None: break; case CropMethod.Center: { var cropRect = CropBitmap.GetCenterCropRect(imageSize, screenSize); await CropBitmap.GetCroppedBitmapAsync(imageFile, cropRect, 1.0); } break; case CropMethod.TopMiddle: { var cropRect = CropBitmap.GetTopMiddleCropRect(imageSize, screenSize); await CropBitmap.GetCroppedBitmapAsync(imageFile, cropRect, 1.0); } break; case CropMethod.MostFaces: case CropMethod.BiggestFace: var result = await DetechFromBufferAsync(previewBuffer, 3, 25); var faces = ImageCropper.ScaleFaces(result.Faces, imageSize, result.FrameSize); if (faces.Count() > 0) { if (method == CropMethod.BiggestFace) { faces = faces.OrderByDescending(o => o.Width).Take(1); } var cropRect = CropBitmap.GetGreedyCropRect(imageSize, screenSize, faces); await CropBitmap.GetCroppedBitmapAsync(imageFile, cropRect, 1.0); } else { // No face detected, fall back crop var cropRect = CropBitmap.GetTopMiddleCropRect(imageSize, screenSize); await CropBitmap.GetCroppedBitmapAsync(imageFile, cropRect, 1.0); } break; default: break; } }