Как обрезать повернутую часть WriteableBitmap в приложении Магазина Windows и C#

В приложении Магазина Windows я хочу обрезать повернутую прямоугольную часть WriteableBitmap, как в случае 2 на следующем изображении.

Изображение

  • У меня есть P0, ширина, высота и P1 и угол поворота прямоугольника.
  • Вращение основано на центре каждого прямоугольника

Я использую метод расширения обрезки, доступный в WriteableBitmapEx.WinRT для обрезки.

В случае 1 я делаю это:

            RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap();
            await renderTargetBitmap.RenderAsync(PhotoGrid);

            WriteableBitmap bitmapImage = new WriteableBitmap(renderTargetBitmap.PixelWidth, renderTargetBitmap.PixelHeight);

            IBuffer pixelBuffer = await renderTargetBitmap.GetPixelsAsync();
            using (var stream = new InMemoryRandomAccessStream())
            {
                var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, stream);
                encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore, (uint)renderTargetBitmap.PixelWidth, (uint)renderTargetBitmap.PixelHeight, 96, 96, pixelBuffer.ToArray());

                await encoder.FlushAsync();
                stream.Seek(0);

                bitmapImage.SetSource(stream);
            }

            // Redraw the WriteableBitmap
            bitmapImage.Invalidate();

            SampleImage.Source = bitmapImage.Crop(new Rect(p0.X, p0.Y, width, height));

Но когда происходит вращение, я не знаю, какой расчет следует применять для обрезки, как в случае 2.

Кто-нибудь из вас будет любезен помочь?

Спасибо!


person Ali    schedule 13.01.2014    source источник


Ответы (1)


Библиотека WriteableBitmapEx реализует метод RotateFree.

bitmapImage.RotateFree(70);

http://writeablebitmapex.codeplex.com/SourceControl/changeset/82055

person Olivier Payen    schedule 14.01.2014
comment
Спасибо за ответ. Я знаю, что у него есть такой метод поворота, но мой вопрос заключался в том, как обрезать эту повернутую область, чтобы она не вращалась. Считайте, что у вас есть изображение, сверху есть украшение в виде прямоугольников, которые можно вращать. затем возник вопрос, как обрезать эту область вращения внутри прямоугольника. - person Ali; 16.01.2014
comment
Вы можете повернуть полное изображение, а затем обрезать прямоугольник. - person Olivier Payen; 16.01.2014
comment
Мой первый подход - найти способ без необходимости поворачивать само изображение. Позвольте мне лучше уточнить мой вопрос: вопрос заключается в том, как рассчитать положение точек после вращения, чтобы иметь возможность использовать их для метода обрезки. На самом деле, если вы попытаетесь сделать образец для себя, проблема/вопрос станет очевидной. - person Ali; 16.01.2014