2017-04-19 222 views
0

我有一個VSTO for powerpoint,並且想要調整圖像的大小,使它們與幻燈片的大小相同。我有一個樣本圖像是1000x300,幻燈片是960x540。所以這是我的代碼有:VB.NET調整大小和裁剪圖像

_W=960 
_H=540 

Dim img As Image = System.Drawing.Bitmap.FromFile(file1) 
OldRect = New RectangleF(233, 0, 533, 300) ' calculated values to crop left and right 
NewRect = New RectangleF(0, 0, _W, _H) 

Dim bmp As Bitmap = New Bitmap(img, _W, _H) 
Dim g As Graphics = Graphics.FromImage(bmp) 
g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic 
g.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality 
g.CompositingQuality = Drawing2D.CompositingQuality.HighQuality 
g.DrawImage(img, NewRect, OldRect, GraphicsUnit.Pixel) 
img.Save(file2, Imaging.ImageFormat.Png) 

,但是當我看到文件2是相同的1000x300文件原件。我在這裏錯過了什麼?

+0

'img.Save(file2,Imaging.ImageFormat.Png)'您正在保存的原始圖像對象不是新的。您也泄漏資源 – Plutonix

+0

afaik g.DrawImage重寫img的內容,因爲它將其用作源和目標。第一個NewRect應該告訴它新的尺寸和OldRect原始圖像的一部分。 或者是我失蹤的部分,不是這樣工作嗎? – user3432565

+0

btw,我在退出函數之前調用img.Dispose()。當我退出該功能時,其餘的應該是GC'd? – user3432565

回答

0

@plutonix;你在發現。我錯誤地認爲DrawImage會替代它提供的圖像。但是保存了創建圖形對象的位圖並生成了預期的圖像。

bmp.Save(file2, Imaging.ImageFormat.Png) 

作品完美。謝謝!