2012-06-05 2 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

Если я вас правильно понимаю, вы, кажется, пытаются подогнать изображение к имеющемуся размеру страницы. Похоже, вы смешиваете ширину и высоту при назначении изображенийPrintHeight и 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);