मेरा सवाल है इसी तरह करने के लिए प्राप्त करने के लिए कैसे की सही स्थिति पिक्सेल माउस से निर्देशांक?, के साथ जोड़ा चेतावनी है कि छवि है एक संभावित TransformedBitmap
है , जहां के flips और घुमाव लागू किया जा सकता है, और अभी भी वापस पिक्सेल निर्देशांक के मूल छवि.
मेरे Window
'एस डिजाइन इस तरह दिखता है:
<DockPanel>
<Label DockPanel.Dock="Bottom" Name="TheLabel" />
<Image DockPanel.Dock="Top" Name="TheImage" Stretch="Uniform" RenderOptions.BitmapScalingMode="NearestNeighbor" MouseMove="TheImage_MouseMove" />
</DockPanel>
और codebehind इस तरह दिखता है:
public MainWindow()
{
InitializeComponent();
const int WIDTH = 4;
const int HEIGHT = 3;
byte[] pixels = new byte[WIDTH * HEIGHT * 3];
pixels[0] = Colors.Red.B;
pixels[1] = Colors.Red.G;
pixels[2] = Colors.Red.R;
pixels[(WIDTH * (HEIGHT - 1) + (WIDTH - 1)) * 3 + 0] = Colors.Blue.B;
pixels[(WIDTH * (HEIGHT - 1) + (WIDTH - 1)) * 3 + 1] = Colors.Blue.G;
pixels[(WIDTH * (HEIGHT - 1) + (WIDTH - 1)) * 3 + 2] = Colors.Blue.R;
BitmapSource bs = BitmapSource.Create(WIDTH, HEIGHT, 96.0, 96.0, PixelFormats.Bgr24, null, pixels, WIDTH * 3);
TheImage.Source = bs;
}
private void TheImage_MouseMove(object sender, MouseEventArgs e)
{
Point p = e.GetPosition(TheImage);
if (TheImage.Source is TransformedBitmap tb)
TheLabel.Content = tb.Transform.Inverse.Transform(new Point(p.X * tb.PixelWidth / TheImage.ActualWidth, p.Y * tb.PixelHeight / TheImage.ActualHeight)).ToString();
else if (TheImage.Source is BitmapSource bs)
TheLabel.Content = new Point(p.X * bs.PixelWidth / TheImage.ActualWidth, p.Y * bs.PixelHeight / TheImage.ActualHeight).ToString();
}
मँडरा जब में नीचे-दाएं कोने में (जो मैं नीले रंग के लिए आसान ट्रैकिंग) के गैर-बदल छवि, आप सही ढंग से देखने के निर्देशांक (~4, ~3), कर रहे हैं, जो छवि आयाम है ।
हालांकि, एक बार जब आप लागू होते हैं एक को बदलने के लिए, उदाहरण के लिए बदल रहा है TheImage.Source = bs;
करने के लिए TheImage.Source = new TransformedBitmap(bs, new RotateTransform(90.0));
पर मँडरा , नीले रंग के बजाय देता है (~4, ~0).
मुझे लगता है कि एक पर लग सकता है वास्तविक मैट्रिक्स के मूल्यों को बदलने, और यह निर्धारित कैसे समायोजित करने के लिए बिंदु में सभी विभिन्न मामलों में, लेकिन यह की तरह लगता है वहाँ होना चाहिए एक आसान समाधान का उपयोग उलटा परिणत.
Image
में एकGrid
जो एक पृष्ठभूमि है और चालेंMouseMove
घटना के लिएGrid
, पिक्सेल निर्देशांक नहीं रह रहे हैं सही है, जब की सीमा से बाहर छवि के बाद से, यह केवल से जवाब देता है, 0..चौड़ाई और 0..ऊंचाई. किसी भी विचार कैसे यह तय करने के लिए?