2014-03-14 132 views
1

我打印的圖像2349 x 3600像素。我調整了圖像大小,但打印模糊不清。請looke在碼 -在C打印高分辨率圖像#

public Bitmap resizeimage(Bitmap bitmap) 
{ 
    Bitmap result = new Bitmap(850, 1101); 
    using (Graphics grap = Graphics.FromImage(result)) 
    {    
     grap.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; 
     grap.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Bicubic; 
     grap.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; 
     grap.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; 

     grap.DrawImage(bitmap, 0, 0, 850, 1101); 
    } 
    return result; 
} 

我什麼都試過更改位圖大小,圖形的質量,但仍然圖像模糊。 我用微軟Office 2007和調整大小的圖像並打印它,它是如此清晰。 我如何才能獲得準確的打印質量,正如我在微軟Office 2007. 請幫助。

這裏是繪製前的代碼 - PrintPreviewDialog printpreview = new PrintPreviewDialog();

  // PrintPreviewControl printpreviewc = new PrintPreviewControl(); 
      PrintDocument printdocument = new PrintDocument(); 

      printdocument.PrinterSettings.PrinterName = "EPSON L100 Series"; 
      int horizantal_dpi = printdocument.PrinterSettings.DefaultPageSettings.PrinterResolution.X; 
      int vertical_dpi = printdocument.PrinterSettings.DefaultPageSettings.PrinterResolution.Y; 
      decimal final_width_dpi = (((int)printdocument.DefaultPageSettings.PrintableArea.Width * horizantal_dpi)/100); 
      decimal final_height_dpi = (((int)printdocument.DefaultPageSettings.PrintableArea.Height * vertical_dpi)/100); 

      printimagaprint = new Bitmap((int)final_width_dpi, (int)final_height_dpi); 

      //set resoultion 
      printimagaprint.SetResolution(horizantal_dpi, vertical_dpi); 

      Graphics g = System.Drawing.Graphics.FromImage(printimagaprint); 
      g.DrawImage(bitmap, 0, 0, printimagaprint.Width, printimagaprint.Height); 


      printdocument.PrintPage+=new PrintPageEventHandler(printdocument_PrintPage); 
      // printdocument.Print(); 
      printdocument.DocumentName = textBox1.Text; 
      printpreview.Document = printdocument; 
      printpreview.ShowDialog(); 
+0

你的代碼沒什麼意義。什麼是源位圖,爲什麼我將850x1101視爲繪製圖像的大小?你如何打印它? – TomTom

+0

TomTom指出,您的代碼不完整。沒有太多需要解決的問題,但是您可能需要將圖像設置爲300dpi,或者在打印之前確保您匹配打印機的分辨率。 – misfitgeek

+0

這是非常重要的,打印機的分辨率比顯示器輕鬆6倍。顯示器通常爲96 dpi,噴墨或激光打印機爲600 dpi。因此,位圖中的每個像素都會變成紙張上的6x6墨水塊。你的手臂不夠長,無法隱藏它。唯一真正的對策是將位圖打印6倍,使位圖中的每個像素都映射到打印機上的一個像素。或者使用更大的位圖。 –

回答

0

嘗試在打印前匹配打印機分辨率。

printDialog.PrinterSettings.PrinterName = GetTargetPrinter(); 

int horizontal_dpi = printDialog.PrinterSettings.DefaultPageSettings.PrinterResolution.X; 
int vertical_dpi = printDialog.PrinterSettings.DefaultPageSettings.PrinterResolution.Y; 
Decimal final_width_dpi = (((int)printDialog.PrinterSettings.DefaultPageSettings.PrintableArea.Width * horizontal_dpi)/100); 
Decimal final_height_dpi = (((int)printDialog.PrinterSettings.DefaultPageSettings.PrintableArea.Height * vertical_dpi)/100); 

printImage = new Bitmap((int)final_width_dpi, (int)final_height_dpi); 

// Set Resolution 
printImage.SetResolution(horizontal_dpi, vertical_dpi); 

Graphics g = System.Drawing.Graphics.FromImage(printImage); 

請嘗試提供更多的描述性代碼。我現在只是假設。

+0

謝謝,請查看我的完整代碼,我正在生成打印預覽,然後打印此圖像。 –

+0

我在上面添加了你的代碼,但它仍然在打印預覽中生成大圖,請看。 –