我有一個通過DrawToBitmap方法繪製幾個控件而創建的Bitmap對象。我現在想打印位圖。但是,位圖太大而無法放在單個頁面上,因此必須縮小比例。我試圖做的,使用的DrawImage以下過載:縮放和打印位圖對象
public void PrintPageHandler(object sender, PrintPageEventArgs e)
{
Bitmap bitmap = GetBitmap();
Rectangle destRect = new Rectangle(
e.MarginBounds.X,
e.MarginBounds.Y,
e.MarginBounds.Width,
e.MarginBounds.Width * bitmap.Height/bitmap.Width);
e.Graphics.DrawImage(
bitmap,
destRect,
0,
0,
bitmap.Width,
bitmap.Height,
System.Drawing.GraphicsUnit.Pixel);
}
注意,destRect寬度和高度構造喜歡這樣,因爲位圖更爲廣闊大於高度(即寬度始終是限制尺寸)。
我的問題是,圖像打印時會變得非常模糊。我是否正確縮放了這個?我有一種感覺,e.MarginBounds和圖像尺寸之間的GraphicsUnit不匹配可能存在一些問題。任何幫助,將不勝感激。
[UPDATE]
我試圖調整使用在下面的評論中給出的方法的位圖,但是圖像仍然打印模糊。爲了測試,我將原始位圖和調整大小的位圖都保存爲文件,在Windows照片查看器中打開它們,並嘗試從那裏打印它們。經過調整大小的圖像會像我在c#應用程序中那樣模糊地打印,但原始圖像打印效果非常好;無論採用哪種算法,Windows照片查看器用於調整大小到單個頁面都不會導致圖像變模糊。
我想知道,Windows照片查看器可以在調整打印大小時增加像素密度嗎?也許這就是爲什麼在代碼中調整它使其變得模糊的原因;原始像素密度不足以清楚地顯示按比例縮小的圖像。
http://www.switchonthecode.com/tutorials/csharp-tutorial-image-editing-saving-cropping-and-resizing –
您是否嘗試過在e.Graphics上設置插值方法? I.e:e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; – Cheesebaron
@ Cheesebaron:我嘗試過。它似乎沒有太大的區別。 – jjoelson