2009-05-18 34 views
4

我正在做一些標準代碼,我將徽標應用於圖像並且工作正常。Graphics.DrawImage徽標在大圖像上縮放不正確

源圖像始終爲1024 x 768,因爲之前的代碼需要圖像並調整其大小(根據原始圖像創建新文件)。

標誌正確地應用於一些圖像上,我有2288 x 1712.如果我使用3264 x 2448的圖像,那麼徽標會添加到正確的開始座標上,但會進行x和y軸。

徽標之間應有10px的間隙。您可以看到的徽標中的兩個字母也遠大於源圖像徽標。

alt text http://i40.tinypic.com/13z0gf4.jpg

如果我採取的是做了錯誤的行爲(3264 X 2448),並將其更改爲2288 X 1712,然後運行該代碼的圖像,輸出正確的結果!

我不明白,因爲變量sourceImg始終是1024 x 768版本所以爲什麼要調整原始圖像的大小會產生影響?

Image sourceImg = Image.FromFile(Path.Combine(filepath,filename)); 
Image logo = Image.FromFile(watermark); 

Graphics g = Graphics.FromImage(sourceImg); 
g.DrawImage(
    logo, 
    sourceImg.Width - horizontalPosition - logo.Width, 
    sourceImg.Height - verticalPosition - logo.Height 
); 
g.Dispose(); 
logo.Dispose(); 

sourceImg.Save(Path.Combine(filepath, filename)); 
sourceImg.Dispose(); 

回答

9

您正在使用的DrawImage的重載採用的圖像的PPI值來計算的大小。由於徽標的PPI值低於圖像的PPI值,徽標會逐漸放大,以使它們的相對物理尺寸(英寸而不是像素)相同。

g.DrawImage(
    logo, 
    sourceImg.Width - horizontalPosition - logo.Width, 
    sourceImg.Height - verticalPosition - logo.Height, 
    logo.Width, 
    logo.Height 
); 
:在您指定的像素大小

使用過載