Мне поручено создать функцию "Cinemagraph", пользователь должен выбрать нужную область с помощью InkCanvas
, чтобы нарисовать выбранные пиксели, которые должны оставаться нетронутыми для остальной части анимации/видео (или, чтобы выбрать пиксели, которые должны быть "живыми" ).
Я собираюсь собрать Stroke
коллекцию из InkCanvas
и использовать ее для обрезания изображения и слияния с нетронутым.
Как я могу это сделать? Я могу легко загрузить изображения с диска, но как я могу обрезать изображение на основе штриха?
Подробнее:
После рисования и выбора пикселей, которые должны оставаться статичными, у меня есть коллекция Stroke
. Я могу получить Geometry
каждого отдельного Stroke
, но мне, вероятно, нужно объединить все геометрии.
Основываясь на объединенном Geometry
, мне нужно инвертировать (Geometry
) и использовать для клипа мой первый кадр, позже с готовым обрезанным изображением мне нужно объединить все остальные кадры.
Мой код:
//Gets the BitmapSource from a String path:
var image = ListFrames[0].ImageLocation.SourceFrom();
var rectangle = new RectangleGeometry(new Rect(new System.Windows.Point(0, 0), new System.Windows.Size(image.Width, image.Height)));
Geometry geometry = Geometry.Empty;
foreach(Stroke stroke in CinemagraphInkCanvas.Strokes)
{
geometry = Geometry.Combine(geometry, stroke.GetGeometry(), GeometryCombineMode.Union, null);
}
//Inverts the geometry, to clip the other unselect pixels of the BitmapImage.
geometry = Geometry.Combine(geometry, rectangle, GeometryCombineMode.Exclude, null);
//This here is UIElement, I can't use this control, I need a way to clip the image without using the UI.
var clippedImage = new System.Windows.Controls.Image();
clippedImage.Source = image;
clippedImage.Clip = geometry;
//I can't get the render of the clippedImage control because I'm not displaying that control.
Есть ли способ скопировать BitmapSource без использования UIElement?
Может быть, возможно
Я думаю о OpacityMask
и кисти... но я не могу использовать UIElement, мне нужно применить OpacityMask
непосредственно к BitmapSource
.