Как на контроле Image WPF нарисовать мышкой прямоугольник и получить значения его пикселей?

Для того чтобы на контроле Image WPF нарисовать прямоугольник мышкой и получить значения его пикселей, вам необходимо использовать WPF события мыши и работать с объектом System.Windows.Media.Imaging.WriteableBitmap.

1. Создайте новый проект WPF в Visual Studio.
2. В XAML разметке добавьте контрол Image:

<Window x:Class="YourNamespace.YourClass"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Image x:Name="imageControl" MouseLeftButtonDown="ImageControl_MouseLeftButtonDown" />
    </Grid>
</Window>

3. В коде обработчика события MouseLeftButtonDown привяжите изображение к WriteableBitmap и начните отслеживать перемещение мыши:

c# private WriteableBitmap writeableBitmap; private CroppedBitmap croppedBitmap; private Point startPoint; private Rectangle selectionRectangle; public MainWindow() { InitializeComponent(); // Получите изображение из ресурсов проекта или другим способом. BitmapImage bitmapImage = new BitmapImage(new Uri("path/to/your/image.jpg", UriKind.Relative)); // Привязка изображения к контролу Image. imageControl.Source = bitmapImage; // Создание экземпляра WriteableBitmap на основе изображения. writeableBitmap = new WriteableBitmap(bitmapImage); } private void ImageControl_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { startPoint = e.GetPosition(imageControl); // Создание прямоугольника выделения. selectionRectangle = new Rectangle { Stroke = Brushes.Red, StrokeThickness = 2 }; // Добавление прямоугольника выделения на Grid. ((Grid)imageControl.Parent).Children.Add(selectionRectangle); // Обработка события перемещения мыши. imageControl.MouseMove += ImageControl_MouseMove; // Обработка события отпускания кнопки мыши. imageControl.MouseLeftButtonUp += ImageControl_MouseLeftButtonUp; } private void ImageControl_MouseMove(object sender, MouseEventArgs e) { // Размер и позиция прямоугольника выделения. double width = e.GetPosition(imageControl).X - startPoint.X; double height = e.GetPosition(imageControl).Y - startPoint.Y; double x = startPoint.X; double y = startPoint.Y; // Обновление размера и позиции прямоугольника выделения. selectionRectangle.Width = Math.Abs(width); selectionRectangle.Height = Math.Abs(height); Canvas.SetLeft(selectionRectangle, x); Canvas.SetTop(selectionRectangle, y); } private void ImageControl_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { // Удаление обработчика события перемещения мыши. imageControl.MouseMove -= ImageControl_MouseMove; // Получение координат и размера прямоугольника выделения. double x = Canvas.GetLeft(selectionRectangle); double y = Canvas.GetTop(selectionRectangle); double width = selectionRectangle.Width; double height = selectionRectangle.Height; // Создание вырезанного изображения. croppedBitmap = new CroppedBitmap( writeableBitmap, new Int32Rect((int)x, (int)y, (int)width, (int)height)); // Получение пикселей вырезанного изображения. byte[] pixelData = new byte[(int)(width * height * 4)]; croppedBitmap.CopyPixels(pixelData, (int)(width * 4), 0); // Обработка полученных пикселей. // В pixelData находятся значения RGB каждого пикселя. // Можете сделать с ними что угодно, например, вывести на консоль или сохранить в файл. // Удаление прямоугольника выделения. ((Grid)imageControl.Parent).Children.Remove(selectionRectangle); }

Вот и все. Теперь при нажатии левой кнопкой мыши пользователь может нарисовать прямоугольник на изображении, а после отпускания кнопки мыши вы вырежете этот прямоугольник из исходного изображения и получите значения пикселей.