คำถามคือคล้ายกับ วิธีที่จะถูกตำแหน่งของพิกเซลจากเมาส์พิกัด, กับการเพิ่ม caveat นภาพอาจจะเป็น TransformedBitmap
อยู่ที่ไหนเอื้อมถือและ rotations อาจจะสมัครและยังคงกลับไปที่พิกเซลจุดพิกัดของภาพต้นฉบับ
ของฉัน Window
's ออกแบบดูเหมือนนี้:
<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..ความสูงของ. รู้ไหมว่าจะแก้ไขเรื่องนี้?