2009-10-20 8 views
1

Supposons que j'ai une image qui montre sa source de façon scalée, comment puis-je utiliser un événement MouseMove pour afficher dans une étiquette ou un bloc de texte la position du pixel dans lequel se trouve le curseur?WPF comment afficher une position de pixel Image.Source (BitmapSource)?

(j'ai besoin les coordonnées en pixels pas les coordonnées de l'image par rapport à sa taille)

Merci à l'avance.

Répondre

6

Vous pouvez connaître la hauteur et la largeur en pixels réelles à partir de ImageSource.

ImageSource imageSource = image.Source; 
    BitmapImage bitmapImage = (BitmapImage) imageSource ; 

Maintenant que vous avez l'image affichée dans le contrôle Image. Vous pouvez facilement faire correspondre la position de la souris à l'échelle des pixels.

pixelMousePositionX = e.GetPosition(image).X * bitmapImage.PixelWidth/image.Width; 
pixelMousePositionY = e.GetPosition(image).Y * bitmapImage.PixelHeight/image.Height; 

Amusez-vous

Jobi Joy

+0

Merci pour l'aide, votre solution semble être simple et efficace. Merci beaucoup! – Mario

2

Si votre XAML de l'image comme suit:

<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> 

Peut-être que la largeur du contrôle Image est Double.NaN, nous avons donc besoin d'utiliser ActualWidth propriété. donc le code comme suit:

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(); 
    } 
+1

Vous avez raison, la réponse précédente à la poste la largeur de l'image est de retour NaN –

Questions connexes