WPF как отобразить изображение.Исходное положение пикселя (BitmapSource)?
-
22-09-2019 - |
Вопрос
Предположим, у меня есть изображение, которое показывает его источник масштабированным способом, как я мог бы использовать Событие MouseMove, чтобы показать в метке или текстовом блоке положение пикселя, в котором находится курсор?
(Мне нужны координаты пикселей, а не координаты изображения относительно его размера)
Заранее благодарю.
Решение
Вы можете узнать фактическую высоту и ширину пикселя из источника изображения.
ImageSource imageSource = image.Source;
BitmapImage bitmapImage = (BitmapImage) imageSource ;
Теперь, поскольку вы получили изображение, отображаемое в системе управления изображениями.Вы можете легко сопоставить положение мыши с масштабом в пикселях.
pixelMousePositionX = e.GetPosition(image).X * bitmapImage.PixelWidth/image.Width;
pixelMousePositionY = e.GetPosition(image).Y * bitmapImage.PixelHeight/image.Height;
Получайте удовольствие
Другие советы
Если ваше изображение XAML выглядит следующим образом:
<Border Grid.Row="1" Grid.Column="0"
BorderThickness="3"
BorderBrush="BlueViolet">
<Image x:Name="Image_Box"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
Source="8.jpg"
Stretch="Uniform"
MouseMove="ImageBox_OnMouseMove"
/>
</Border>
Может быть, тот Image
ширина элемента управления равна двойному.Nan , поэтому нам нужно использовать ActualWidth
собственность.итак, Код следующим образом:
private void ImageBox_OnMouseMove(object sender, MouseEventArgs e)
{
ImageSource imageSource = Image_Box.Source;
BitmapSource bitmapImage = (BitmapSource)imageSource;
TextBoxCursor_X.Text =( e.GetPosition(Image_Box).X * bitmapImage.PixelWidth / Image_Box.ActualWidth).ToString();
TextBoxCursor_Y.Text = (e.GetPosition(Image_Box).Y * bitmapImage.PixelHeight / Image_Box.ActualHeight).ToString();
}