2009-05-18 16 views
4

標準のコードをいくつか実行していますが、画像にロゴを適用していて、正常に動作しています。大きな画像でGraphics.DrawImageのロゴのスケーリングが正しく行われない

ソースイメージはイメージを取得してサイズを変更する前にコードとして常に1024 x 768です(元のイメージに基づいて新しいファイルを作成します)。

私は2288 x 1712の画像に正しくロゴが適用されます。3264 x 2448の画像を使用すると、ロゴは正しい始点座標に追加されますが、x軸とy軸を持ちます。

ロゴの辺の間に10pxのギャップがあります。あなたが見ることができるロゴの2文字は、元の画像のロゴよりもはるかに大きいです。

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

は私が間違っている行動(X 2448 3264)を行うと、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 
); 
:あなたがピクセル単位でサイズを指定

使用過負荷

関連する問題