2012-06-05 41 views
1

我想用C#在一個小矩形中顯示一個大圖像。 問題是,當我不調整矩形大小和圖像時,每次只顯示圖像的一半部分。有沒有辦法在定義的邊界內完全打印圖像?我的意思是,圖像可以將其自身重新調整爲矩形大小?在c中顯示大圖像#

以下是我的代碼:

int imagePrintHeight = this.PaperSize.Width - this.PrintMargins.Top - this.PrintMargins.Bottom; 
int imagePrintWidth = this.PaperSize.Height - this.PrintMargins.Left - this.PrintMargins.Right; 

Size DatestoPrintSize = TextRenderer.MeasureText(DatestoPrint, new Font(this.Font.FontFamily, 10)); 

          y = y + descriptionSize.Height + DatestoPrintSize.Height; 
          imagePrintHeight = imagePrintHeight - descriptionSize.Height - DatestoPrintSize.Height; 

          e.Graphics.DrawString(objCurrentPrintJob.sDescription, new Font(this.Font.FontFamily, 10), new SolidBrush(Color.Black), x + (imagePrintWidth - descriptionSize.Width)/2, this.PrintMargins.Top); 
          e.Graphics.DrawString(DatestoPrint, new Font(this.Font.FontFamily, 10), new SolidBrush(Color.Black), x + (imagePrintWidth - DatestoPrintSize.Width)/2, this.PrintMargins.Top + descriptionSize.Height); 
         } 

         decimal ratio = Math.Round(decimal.Divide(imagetoPrint.Width, imagetoPrint.Height), 4); 
         int tempimagePrintWidth = (int)(Math.Round(imagePrintHeight * ratio, 4)); 
         x += (int)((imagePrintWidth - tempimagePrintWidth)/2); 

要打印我用以下

e.Graphics.DrawImage(imagetoPrint, new Rectangle(x,y ,tempimagePrintWidth,imagePrintHeight)); 
+0

回答有幫助嗎?請在這種情況下接受它,或者如果您仍然遇到問題,請提供更多信息。 – ekholm

+0

@ekholm提供的答案不能解決我的問題。 – abdul

+0

好的,也許我誤解了這個問題,或者還有其他的錯誤。如果您仍然需要幫助,請澄清您的問題。 – ekholm

回答

0

如果我理解正確的話,看來你正試圖將圖像適合可用的頁面大小。看起來像在分配imagePrintHeight和imagePrintWidth時混合了寬度和高度。我會做這樣的縮放,它也將允許圖像和頁面長寬比之間的不同關係:

int imagePrintHeight = this.PaperSize.Height- this.PrintMargins.Top - this.PrintMargins.Bottom; 
int imagePrintWidth = this.PaperSize.Width- this.PrintMargins.Left - this.PrintMargins.Right; 

// Draw description string here... 

double ratio = Math.Min((double)imagePrintWidth/(double)imagetoPrint.Width, (double)imagePrintHeight/(double)imagetoPrint.Height); 
int scaledImageWidth = (int)(ratio * imageWidth); 
int scaledImageHeight = (int)(ratio * imageHeight); 

x = (int)((imagePrintWidth - scaledImageWidth)/2);