我最终只是手动实现了翻译。代码还不错,但确实让我希望他们直接为它提供支持。我可以看到这种方法在很多不同的情况下都很有用。
我想这就是他们添加扩展方法的原因:)
在伪代码中:
// Recompute the image scaling the zoom mode uses to fit the image on screen
imageScale ::= min(pictureBox.width / image.width, pictureBox.height / image.height)
scaledWidth ::= image.width * imageScale
scaledHeight ::= image.height * imageScale
// Compute the offset of the image to center it in the picture box
imageX ::= (pictureBox.width - scaledWidth) / 2
imageY ::= (pictureBox.height - scaledHeight) / 2
// Test the coordinate in the picture box against the image bounds
if pos.x < imageX or imageX + scaledWidth < pos.x then return null
if pos.y < imageY or imageY + scaledHeight < pos.y then return null
// Compute the normalized (0..1) coordinates in image space
u ::= (pos.x - imageX) / imageScale
v ::= (pos.y - imageY) / imageScale
return (u, v)
要获得图像中的像素位置,您只需乘以实际图像像素尺寸,但归一化坐标允许您解决原始响应者关于逐案解决歧义的观点。