2010-10-30 112 views
0

我有一個打印預覽,顯示窗體上的捕獲面板'Panel1.DrawToBitmap(memoryImage,bounds);'Winforms打印預覽模糊

我也將圖像保存到我的硬盤驅動器 - 「memoryImage.Save(‘diary.png’)」

在任何縮放級別在打印預覽中的圖像是模糊的,保存的圖像是完美的(看在Windows照片查看器& PS)。

像打印預覽像保存的圖像,任何想法一樣好?

下面的代碼: -

private void CaptureScreen() 
    { 
     int x = splitContainerDiary.Location.X; 
     int y = splitContainerDiary.Location.Y; 

     int SCwidth = splitContainerDiary.Panel1.Width; 
     int SCheight = splitContainerDiary.Panel1.Height; 

     Rectangle bounds = new Rectangle(x, y, SCwidth, SCheight); 

     memoryImage = new Bitmap(SCwidth, SCheight, System.Drawing.Imaging.PixelFormat.Format32bppArgb); 
     splitContainerDiary.Panel1.DrawToBitmap(memoryImage, bounds); 
     memoryImage.Save("diary.png"); 
    } 

    private void printDocumentDiary_PrintPage(object sender, PrintPageEventArgs e) 
    { 
     CaptureScreen(); 
     Font HeaderFont = new Font("Consolas", 16, FontStyle.Bold); 
     e.Graphics.DrawString(selectedYear.ToString() + " - " + name, HeaderFont, Brushes.Black, 15, 15); 
     e.Graphics.DrawImage(Image.FromFile("diary.png"), 5, 5); 
    // e.Graphics.DrawImage(memoryImage, 0, 40); 
     PrintDoodle(e); 
    } 

我試圖從內存(e.Graphics.DrawImage(memoryImage,0,40),並從所保存的圖像「繪製圖像e.Graphics.DrawImage (Image.FromFile(「diary.png」),5,5);」他們在打印預覽兩個模糊

我已經嘗試了不同的像素格式沒有快樂要麼

我試圖拯救。圖像爲BMP,JPG,PNG也沒有喜悅(從文件中繪製圖像時)。

我曾嘗試使用BitBlt例程也具有相同的結果。

蒂諾

回答

0

這是一臺打印機VS顯示器的設備分辨率之間的顯着差異的必然結果。打印機通常可以以每英寸600點的分辨率進行打印。監視器通常設置爲96 DPI。因此,當您在顯示器上打印尖銳銳利的圖像時,圖像的每個像素都需要打印一個6 x 6的斑點。由於產生的塊狀圖像很短,使用抗鋸齒功能在屏幕上繪製的任何圖像都會得到抗鋸齒像素也是6倍大。徹底破壞效果。對於使用ClearType消除鋸齒繪製的任何文本,這一點尤其明顯。紅色和藍色的條紋在紙上變得非常明顯。

通過在打印機上一對一地繪製圖像,可以部分解決這個問題,確保圖像中的1個像素成爲紙上的1個像素。這應該現在看起來很好和尖銳(減去ClearType問題),但你會看看郵票。長時間增長你的手臂六次會產生同樣的效果。

嗯,這只是行不通。使用PrintDocument類,以便使用其原始分辨率將東西繪製到打印機。使用PrintPage事件處理程序中的e.Graphics提供的方法。避免圖像,除非他們是照片,任何沒有細緻的線條藝術將可以很好地擴展。

+0

漢斯謝謝你的回答,不是我所希望的,但我現在明白了吧。我打印了一個12個月的datagidview日記,每個月每天都有一個單元格,所以它會花費一些工作來使用e.graphics繪圖方法:-(所以我認爲我現在會堅持使用模糊效果,再次感謝Thankyou,蒂諾 – 2010-10-30 14:40:33

0

我遇到了一個類似的「模糊字體」的問題,同時試圖打印出一些自定義文本,我已經預先安排爲TableLayoutPanel中的標籤。

我對模糊的解決方案如下所示:我創建了一個面板,並將其標記爲期望最終大小的四倍(使用字體44而不是11,並使用寬度和高度四倍)。

然後我創建了一個(大)的位圖,並在最後一步(的DrawImage)按比例縮小它:

using (var bmp = new Bitmap(tableLayout.Width, tableLayout.Height)) 
{ 
    tableLayout.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height)); 
    printPageEventArgs.Graphics.DrawImage(
     bmp, 
     printPageEventArgs.MarginBounds.X, 
     printPageEventArgs.MarginBounds.Y, 
     bmp.Width/4, 
     bmp.Height/4); 
} 

產生的文字看起來更清晰無論是在預覽和實際打印頁面。

當然,如果您可以操縱控件的大小,例如通過將它創建爲「屏幕外」,這種方法只能工作。但如果您需要打印實際顯示的控件,它將不起作用。