人人人人人人人人人人人人

uwp 图片剪切

 

  public async void BitmapTransformAndSaveTest()
        {
            var uncroppedfile = await Windows.Storage.ApplicationData.Current.LocalFolder.GetFileAsync("uncropped.jpg");
            if (uncroppedfile == null)
            {
                return;
            }

            WriteableBitmap wb = null;

            // create a stream from the file and decode the image
            var fileStream = await uncroppedfile.OpenAsync(Windows.Storage.FileAccessMode.Read);
            var decoder = await BitmapDecoder.CreateAsync(fileStream);

            // create a new stream and encoder for the new image
            using (InMemoryRandomAccessStream ras = new InMemoryRandomAccessStream())
            {
                var enc = await BitmapEncoder.CreateForTranscodingAsync(ras, decoder);

                // convert the entire bitmap to a 100px by 100px bitmap
                enc.BitmapTransform.ScaledHeight = 100;
                enc.BitmapTransform.ScaledWidth = 100;

                var bounds = new BitmapBounds();
                bounds.Height = 50;
                bounds.Width = 50;
                bounds.X = 50;
                bounds.Y = 50;
                enc.BitmapTransform.Bounds = bounds;

                // write out to the stream
                await enc.FlushAsync();

                // create a writeable bitmap from the stream
                ras.Seek(0);
                wb = new WriteableBitmap(100, 100);
                wb.SetSource(ras);
            }

            // save the cropped file now
            var croppedfile = await Windows.Storage.ApplicationData.Current.LocalFolder.CreateFileAsync("cropped.jpg", Windows.Storage.CreationCollisionOption.ReplaceExisting);
            using (var stream = await croppedfile.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite))
            {
                var pixelStream = wb.PixelBuffer.AsStream();
                var bytes = new byte[pixelStream.Length];
                pixelStream.Seek(0, SeekOrigin.Begin);
                await pixelStream.ReadAsync(bytes, 0, (int)pixelStream.Length);
                await pixelStream.FlushAsync();

                var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, stream);
                encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Straight, (uint)wb.PixelWidth, (uint)wb.PixelHeight, 0, 0, bytes);
                await encoder.FlushAsync();
                await stream.FlushAsync();
            }
        }

  

posted @ 2021-02-26 10:07  wgscd  阅读(57)  评论(1编辑  收藏  举报