2009-01-07 25 views
1

我有一個PictureBox(它的SizeMode屬性設置爲縮放)包含圖像,並且兩者的大小可能會有所不同。PictureBoxSizeMode.Zoom - 縮放係數是多少?

由於用戶必須直接與圖像交互,我需要能夠將PictureBox的點擊座標轉換爲圖像座標。

到目前爲止,我所做的是比較PictureBox的長寬比與圖像的寬高比。例如,如果PictureBox與圖像相關的「更寬屏幕」(請參閱​​屏幕截圖),則表示PictureBox會將圖像拉伸至其自身高度並將其居中放置,並將其背景顏色(此處爲紅色)顯示爲圖像的左側和右側。然後我假設圖像的顯示高度與PictureBox.Height相同,並從那裏開始工作。

雖然有一個問題。正如你在屏幕截圖中看到的那樣(綠色註釋地雷),被拉伸到適合(縮放)在紅色PictureBox內部的白色圖像在底部留下一小段空白。

screenie http://img132.imageshack.us/img132/3541/bordernl6.th.png Click for full-size.

這不會發生的所有PictureBox.Size/Image.Size組合,雖然。這使我相信必須有更好的方式來做到這一點。


當然,我會這樣做的。我只需調整代碼以刪除上下文依賴關係。

但底部的邊距並不來自我的代碼。它來自PictureBox本身。幫我一個忙,並嘗試以下操作:

將一個圖片框(PictureBox1)添加到窗體,將其停靠在窗體的所有四邊。該代碼應如下所示:

Public Class Form1 

    Private Sub Form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown 

     PictureBox1.SizeMode = PictureBoxSizeMode.Zoom 

     PictureBox1.BackColor = Color.Red 
     PictureBox1.Image = New Bitmap(PictureBox1.Width, PictureBox1.Height) 
     Dim g As Graphics = Graphics.FromImage(PictureBox1.Image) 

     g.FillRectangle(Brushes.White, 0, 0, PictureBox1.Image.Width, PictureBox1.Image.Height) 

    End Sub 

End Class 

運行它,並調整表,使得圖像被拉伸(放大),以填補該圖片框的高度,離開紅柱白色方形的左側和右側。現在垂直調整窗體大小,儘可能慢。你應該看到底部的紅色邊緣。

同樣的事情發生在寬度和水平調整大小,顯示右邊距。

這是因爲這個小缺陷,我知道縮放因子不能像我一直在做的那樣計算;結果只會是一個近似值。如果在嘗試之後仍然認爲代碼是相關的,那麼我很樂意發佈它。

感謝您花時間閱讀並回復。

+0

屏幕截圖的鏈接以404結尾 – K3N 2012-10-30 04:55:16

回答

0

我不認爲有辦法獲得縮放因子。我猜測你的數學可能會出現一個錯誤,因爲底部的空白(也許你有一次性錯誤或某種性質)。

你能發佈一個完整的例子來顯示你正在執行的計算嗎?