2012-07-17 35 views
-2

摘要: 它只是不會在初始表單大小之外繪製。我可以縮小比例,只是不能放大,它會被裁剪掉。C#表格調整大小後,圖像無法從原始表單尺寸中提取

描述如果總結不夠清楚: 因此,如果我的表單最初大小爲1000,800。縮放後,我繪製的圖像永遠不會大於1000,800。

如果我將表格縮放到2000,1600的大小,它將被裁剪掉。圖像將在下方和右方切割一半,因此僅繪製左上角部分。

我確定我的縮放工作正確,因爲它的工作原理是,只要我的表單在創建時設置爲2000,1600。

。 。 代碼請求,但我不知道它是否重要。 。

mapDrawer.DrawImage(map1, 
    new RectangleF(0, 0, ImageSizeX * scale, ImageSizeY * scale), 
    new RectangleF(0, 0, ImageSizeX, ImageSizeY), 
    GraphicsUnit.Pixel); 

其中scale是form.size/map_size。 而我採用了x或y的較小比例。

+0

請顯示您的代碼... – Marco 2012-07-17 10:20:08

+0

「摘要」應該是上面的「謎語」嗎? – MoonKnight 2012-07-17 10:21:15

+0

好嗎?你是否會縮放你的mapDrawer,不管是什麼? – 2012-07-17 10:58:42

回答

1

mapDrawer對象是問題雖然不能從片段不夠看。毫無疑問,您可以在窗體的Load事件中創建一個Graphics對象。它有一個基於當時表單大小的剪輯區域。如果你通過調整大小來增大表單大小,你會發現這個複製的Graphics對象不能超出其原始邊界。它不能。

永遠不要複製Graphics對象,總是在Paint事件處理程序中執行繪畫並使用傳遞的e.Graphics對象。這也確保了雙緩衝可以正確工作,這是你可能想要打開的東西。如果發生了應該重繪圖像的事情,請使用Invalidate()方法。

+0

難道你是誰在上面對我的答案發表評論嗎?如果是這樣,我做了一些更正。如果不是你,那麼我仍然會做出一些更正,但我也給了你一個不必要的評論通知。 – Tharwen 2012-07-17 11:26:17

+0

是的,那就是我。我決定最好發表一個答案來解釋爲什麼會出錯。 – 2012-07-17 11:28:13

+0

我會看看這個,看看這是不是問題。謝謝! – 2012-07-17 16:55:37

0

我最好的猜測是,你需要重新繪製圖像時的形式重新粉刷:

private void Form1_Paint(object sender, PaintEventArgs e) 
{ 
    Graphics g = e.Graphics; 

    g.DrawImage(map1, 
     new RectangleF(0, 0, ImageSizeX * scale, ImageSizeY * scale), 
     new RectangleF(0, 0, ImageSizeX, ImageSizeY), 
     GraphicsUnit.Pixel); 
} 

要調用當表單大小(或其他任何強制重新繪製)這個方法,你應該添加一個手柄上的油漆事件發生在窗體的構造函數:

Paint += new EventHandler(Form1_Paint); 
相關問題