[英]Calculate the viewport rectangle of a zoomed/scrolled canvas
我有一個自定義控件,用於顯示畫布圖像。 我正在使用自動滾動以及縮放比例來顯示圖像。
因此,我必須使用的數據是:
我需要在任何給定時間計算視口,以相對於原始位圖的坐標給出。 因此,如果整個圖像可見,並且圖像的尺寸為800x600,則視口將是0,0處的Rectangle,尺寸為800,600。
我放大了圖像,視口應始終是代表整個可見區域的矩形。 如果我縮小並且圖像在屏幕上居中,則視口應該是整個圖像。
編輯:這是圖形表示。 該位圖當前已縮放,但是我具有原始大小和縮放比例。 我有AutoScrollPosition。 根據縮放級別設置AutoScrollMinSize。 如果圖像高度為500像素,並且縮放比例為200%(2.0f),則AutoScrollMinSize.Height為1000。
紅色框代表視口矩形。
我想到了。 這是我需要為我工作的代碼。
在此解決方案中,AutoScrollMinSize等於CanvasBounds.Size。 首先,我檢查窗口是否大於畫布,在這種情況下,我知道整個位圖都是可見的,並將其返回為視口。 否則,我通過將屏幕像素轉換為位圖像素來進行計算。
public RectangleF Viewport
{
get
{
if (AutoScrollMinSize.Width <= ClientRectangle.Width && AutoScrollMinSize.Height < ClientRectangle.Height)
{
return BitmapRectF;
}
else
{
return new RectangleF(
Math.Abs(AutoScrollPosition.X / _ratio),
Math.Abs(AutoScrollPosition.Y / _ratio),
Math.Min(CanvasBounds.Width / _ratio, ClientRectangle.Width / _ratio),
Math.Min(CanvasBounds.Height / _ratio, ClientRectangle.Height / _ratio)
);
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.