2013-12-12 20 views
3

說我有下面的代碼這是黑白200x100或任意大小真正的圖像:假設圖像旋轉精確控制高度和寬度是否安全?

Image image = Bitmap.FromFile(fileName); 
image.RotateFlip(RotateFlipType.Rotate90FlipNone); 
image.save(fileName); 

它是安全的假設,輸出尺寸100×200是?寬度和高度恰好交換了值?我的同事相信它可能無法得到保證。我認爲所涉及的矩陣數學是準確可靠的。誰是對的?如果它很重要,我們正在處理tif圖像。

+0

我沒有測試它。數學當然支持你的理論,但我不能保證代碼。你不能只測試它嗎?我懷疑你的同事可能會thinkign在哪裏你做2個45度旋轉或相似的在這種情況下,我強烈懷疑這會不會是一樣的情況。 – Chris

+0

我會問你的同事的一個問題是,「爲什麼不這樣做?」。他是否發現了輪換沒有導致確切結果的情況?我想不出爲什麼'RotateFlip'方法不會返回確切的結果。 –

+0

我認爲做出這個假設是安全的。但是,如果您需要保證,爲什麼不創建一個具有您需要的確切大小的新位圖,然後爲旋轉的圖像分配一個拉伸來填充。這樣你就知道這是預期的尺寸 – Brendan

回答

4

的Image.RotateFlip方法只做在90度(0,90,等等) 這意味着使用後,會總是與2中的一個結果落得精確倍數旋轉: 1.要麼寬度和高度將保持不變(例如,當您不旋轉或旋轉180度時)。 2.或者寬度和高度將精確交換值。

獎勵信息: 這種類型的直角旋轉是「無損的」,這意味着顏色值被保留,並且操作可以顛倒而不丟失任何像素值。 在另一方面,其使不屬於90度的倍數將是一個有損算法任意角度的任何算法。不保證像素位置和/或確切的顏色值通過進行反向旋轉來恢復。

+0

這是我認爲它的工作原理,但我沒有支持的事實。我的同事是我的3倍,並認爲他知道得更好。 –