Хотя Нивас не утверждал, чего он хотел достичь, я подозреваю, что это похоже на то, на что я только что смотрел - перевод нарисованного пользователем (т.е. обрезанного) прямоугольника в пространство изображения в окне рисунка. Я не пробовал наследование, как предложил RvdK, я использовал метод отражения как быстрый обходной путь. Альтернативой предложению RvdK или открытию Microsoft доступа к ImageRectangle может быть предоставление метода RectangleToImageRectangle. Который я полагаю, я мог бы обернуть в объект, который наследуется от PB ...
Ссылка на проблему с Microsoft Connect не работает.
Вот код, который я использовал, он предоставляет прямоугольник изображения PB и был протестирован для режимов .Zoom и .StretchImage:
PropertyInfo pInfo = pictureBox1.GetType().GetProperty("ImageRectangle",
System.Reflection.BindingFlags.Public |
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Instance);
Rectangle ImRectangle = (Rectangle)pInfo.GetValue(pictureBox1, null);
Point rTL = new Point((rectCropArea.Left - ImRectangle.Left) * pictureBox1.Image.Width / ImRectangle.Width,
(rectCropArea.Top - ImRectangle.Top) * pictureBox1.Image.Height / ImRectangle.Height);
Size rSz = new Size(pictureBox1.Image.Width * rectCropArea.Width / ImRectangle.Width,
pictureBox1.Image.Height * rectCropArea.Height / ImRectangle.Height);
'rect' = new Rectangle(rTL,rSz);