คล้ายกับของคน ได้ยังไงฉันแปลงจากเมาส์พิกัดที่จะพิกเซลจุดพิกัดของ TransformedBitmap? แต่กับคนเพิ่ม wrinkle นั่นของฉัน 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();
}
}
สำหรับคนส่วนใหญ่ส่วนหนึ่งมันทำงานงั้นนะแต่ถ้าเธอเมาส์อยู่เหนือในเกรย์ทางด้านซ้ายของหมุนรูปภาพ(ขนาดเวลาอย่างน้อยอยู่ที่ไหน X คือที่จับภาพด้านล่างนี้),คุณได้คุยประสานงาน(0.5)ที่ทำให้มันดูเหมือนคุณอยู่ในภาพตอนที่อยู่ในความเป็นจริงคุณออกไปข้างนอกและป y-ประสานงาควรจะสูงกว่าที่ความสูงของภาพเพื่อจะได้ไตร่ตรองเรื่องนี้
เรื่องนี้มันสำคัญเพราะว่าฉันพยายามจะอนุญาตให้ผู้ใช้ที่เลือกเป็น ROI และฉันต้องการรู้ว่าตอนที่การเลือกนอกเหนือภาพขอบเขตแม้ว่าฉันยังคงต้องการจะอนุญาต