簡體   English   中英

計算縮放/滾動畫布的視口矩形

[英]Calculate the viewport rectangle of a zoomed/scrolled canvas

我有一個自定義控件,用於顯示畫布圖像。 我正在使用自動滾動以及縮放比例來顯示圖像。

因此,我必須使用的數據是:

  • 縮放比例(2.0f = 200%縮放)
  • 畫布邊界(RectangleF)。 800x600px的圖像的CanvasBounds為1600x1200,縮放比例為2.0f。 如果將畫布縮小並且不滾動,則“位置點”是畫布的起點。
  • 客戶矩形
  • 自動滾動位置

我需要在任何給定時間計算視口,以相對於原始位圖的坐標給出。 因此,如果整個圖像可見,並且圖像的尺寸為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM