Ejemplo n.º 1
0
        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;
            }
        }