我正在使用PictureBox
来显示图片。我的图像直接来自扫描仪,因此分辨率高达4000 * 4000 ...因为我的显示区域要小得多,所以我必须用pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;
显示图像以保持宽高比。
之后,图像位于屏幕中间。
如何找到图像控件左侧与实际图像左侧的 REAL 之间的距离(参见下图)。
有没有解决方案?
顺便说一下。在屏幕左侧显示图像也可以解决问题。
var imageHeight = pictureBox1.Image.Height;
var imageWidth = pictureBox1.Image.Width;
var userSelection = rect.Rect;
var display = pictureBox1.DisplayRectangle;
var xFactor = (float)userSelection.Width / display.Width;
var yFactor = (float)userSelection.Height / display.Height;
var realCropSizeWidth = xFactor * imageWidth;
var realCropSizeHight = yFactor * imageHeight;
var realCropX = imageWidth / display.Width;
realCropX *= userSelection.X;
var realCropY = imageHeight / display.Height;
realCropY *= userSelection.Y;
var realCropRectangle = new Rectangle(realCropX, realCropY, (int)realCropSizeWidth,
(int)realCropSizeHight);
var image = CropImage(pictureBox1.Image, realCropRectangle);
pictureBox1.Image = image;
public Image CropImage(Image source, Rectangle rectangle)
{
var target = new Bitmap(rectangle.Width, rectangle.Height);
using (var g = Graphics.FromImage(target))
{
g.DrawImage(source, new Rectangle(0, 0, target.Width, target.Height),
rectangle,
GraphicsUnit.Pixel);
}
return target;
}
答案 0 :(得分:1)
据我所知,没有直接的方式来获得你想要的东西,但是一些简单的数学就足够了:
您知道保留的原始图像的宽高比,并且您知道正在显示它的图片框的宽高比。基于此,您可以确定图像的确切尺寸(高度或宽度)。一旦您知道可以获得图像的缩放系数,就可以计算出所显示图像的其他尺寸。
由于图像将以不完全适合图片框的尺寸为中心,因此它可以直接找到你想要的距离。