इसी तरह करने के लिए कैसे करते हैं मैं से परिवर्तित माउस के लिए निर्देशांक पिक्सेल निर्देशांक की एक TransformedBitmap? लेकिन साथ जोड़ा गया शिकन है कि मेरे Image
वास्तव में एम्बेडेड एक बड़े माता-पिता Grid
है , जो एक पृष्ठभूमि है, और मैं की तरह होता है, पिक्सेल निर्देशांक करने के लिए, यह भी सही हो सकता है जब मँडरा क्षेत्रों में सीमा से परे की छवि ।
यहाँ है मेरे XAML:
<DockPanel>
<Label DockPanel.Dock="Bottom" Name="TheLabel" />
<Grid DockPanel.Dock="Top" Name="TheGrid" Background="Gray" MouseMove="TheGrid_MouseMove">
<Image Name="TheImage" Stretch="Uniform" RenderOptions.BitmapScalingMode="NearestNeighbor" />
</Grid>
</DockPanel>
और यहाँ कोड है:
public MainWindow()
{
InitializeComponent();
const int WIDTH = 4;
const int HEIGHT = 3;
byte[] pixels = new byte[WIDTH * HEIGHT * 3];
// top-left corner red, bottom-right corner blue for orientation
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 = new TransformedBitmap(bs, new RotateTransform(90.0));
}
private void TheGrid_MouseMove(object sender, MouseEventArgs e)
{
Point p = TheGrid.TranslatePoint(e.GetPosition(TheGrid), TheImage);
if (TheImage.Source is BitmapSource bs)
{
p = new Point(p.X * bs.PixelWidth / TheImage.ActualWidth, p.Y * bs.PixelHeight / TheImage.ActualHeight);
if (TheImage.Source is TransformedBitmap tb)
{
Matrix inverse = tb.Transform.Value;
inverse.Invert();
inverse.OffsetX = 0.0;
inverse.OffsetY = 0.0;
p = inverse.Transform(p);
int w = tb.Source.PixelWidth;
int h = tb.Source.PixelHeight;
p = new Point((p.X + w) % w, (p.Y + h) % h);
}
TheLabel.Content = p.ToString();
}
}
अधिकांश भाग के लिए यह अच्छी तरह से काम करता है, लेकिन अगर आप मंडराना में ग्रे की बाईं करने के लिए घुमाया छवि (मोटे तौर पर जहां एक्स नीचे स्क्रीनशॉट में), आप एक y-निर्देशांक (0.5) है कि बनाता है यह देखो की तरह आप कर रहे हैं छवि में, जब वास्तविकता में आप कर रहे हैं बाहर है, और y-समन्वय होना चाहिए की तुलना में उच्च छवि ऊंचाई को प्रतिबिंबित करने के लिए ।
यह महत्वपूर्ण है क्योंकि मैं कोशिश कर रहा हूँ करने के लिए उपयोगकर्ता की अनुमति दें करने के लिए एक रॉय का चयन करें, और मैं पता करने की जरूरत है जब चयन से परे है छवि सीमा है, हालांकि मैं अभी भी चाहते हैं के लिए यह अनुमति देते हैं.