2014-10-30 47 views
1

我正在使用jQuery-cropbox在Web應用程序中裁剪圖像。裁剪圖像有時是錯誤的區域

大部分時間一切都平穩運行,但不時地,生成的圖像是錯誤的,就像裁剪應用了錯誤的座標一樣。

舉個例子,考慮這個image

enter image description here

在裁剪框,我縮放和拖動,直到我得到這個:

enter image description here

但是當我點擊裁剪按鈕,它給了我這個:

enter image description here

這裏是裁剪代碼:

private Bitmap CropImage(Image img, Rectangle rect) 
{ 
    Bitmap newImg = new Bitmap(rect.Width, rect.Height); 
    Graphics g = Graphics.FromImage(newImg); 
    g.DrawImage(img, -rect.X, -rect.Y); 

    return newImg; 
} 

//... 

// save image 
var streamOut = new MemoryStream(); 
Bitmap newImg = CropImage(oldImg, rect); 
newImg.Save(streamOut, ImageFormat.Png); 

oldImg是以前發佈的,rect我用作物座標圖像。

我檢查了當然的座標,他們是正確的。

僅供參考,以獲得所提供的結果的座標是(那些可能不完全準確,我把他們從第二次測試,所以我肯定放在畫面略有不同):

x: 47 
y: 94 
w: 150 
h: 150 

什麼正在發生 ?

+2

我的錢是DPI的問題。使用'DrawImage'的重載,它接受一個完整的'Rectangle',而不僅僅是位置。 – Rotem 2014-10-30 08:46:58

+0

感謝您的建議,但它不起作用。結果是再次不同雖然(!) – 2014-10-30 08:56:58

+0

專門嘗試這一個:http://msdn.microsoft.com/en-us/library/x2s2a44c(v=vs.110).aspx並傳入'GraphicsUnit.Pixel' 。 – Rotem 2014-10-30 09:09:44

回答

2

您的圖片(已張貼)有72dpi;你的屏幕,因此你使用的圖形可能有96dpi。

這將導致你看到的效果。

爲了避免它畫到一個在你面前的圖形效果只需設置的img分辨率對象:

img.SetResolution((int)g.DpiX, (int)g.DpiY); 
+0

好抓。我會編輯我的問題,使它與答案有更多的關聯,因此它可以幫助未來的讀者。謝謝! – 2014-10-30 12:55:27

+1

這是一個好主意,請做! - +1! (和可愛的圖像;-) – TaW 2014-10-30 13:43:23