Сохранение панели в формате JPEG, сохранение только видимых областей c#

#c# #printing #jpeg

#c# #печать #jpeg

Вопрос:

Я пытаюсь сохранить, а затем распечатать панель на c #. Моя единственная проблема в том, что он сохраняет только видимые области, и когда я прокручиваю вниз, он печатает это.

  Bitmap bmp = new Bitmap(this.panel.Width, this.panel.Height);

 this.panel.DrawToBitmap(bmp, new Rectangle(0, 0, this.panel.Width, this.panel.Height));

 bmp.Save("c:\panel.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
  

Ответ №1:

Попробуйте следующее

     public void DrawControl(Control control,Bitmap bitmap)
    {
        control.DrawToBitmap(bitmap,control.Bounds);
        foreach (Control childControl in control.Controls)
        {
            DrawControl(childControl,bitmap);
        }
    }

    public void SaveBitmap()
    {
        Bitmap bmp = new Bitmap(this.panel1.Width, this.panel.Height);

        this.panel.DrawToBitmap(bmp, new Rectangle(0, 0, this.panel.Width, this.panel.Height));
        foreach (Control control in panel1.Controls)
        {
            DrawControl(control, bmp);
        }

        bmp.Save("d:\panel.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
    }
  

Вот мой результат:

Скриншот формы :

введите описание изображения здесь

Сохраненное растровое изображение :

введите описание изображения здесь

Как вы можете видеть, есть текстовое поле, которое не отображается в форме, но присутствует в сохраненном растровом изображении

Комментарии:

1. Это также решение, если (как и я) вы пытаетесь сохранить панель до того, как форма фактически была нарисована на экране.

2. Ваше решение сработало для меня, НО элементы управления на панелях были нарисованы дважды! Итак, я исправил это с помощью IF (элемент управления не является панелью) перед вызовом дочерних элементов управления.

Ответ №2:

 Panel1.Dock = DockStyle.None // If Panel Dockstyle is in Fill mode     
Panel1.Width = 5000  // Original Size without scrollbar     
Panel1.Height = 5000 // Original Size without scrollbar      
Dim bmp As New Bitmap(Me.Panel1.Width, Me.Panel1.Height)     
Me.Panel1.DrawToBitmap(bmp, New Rectangle(0, 0, Me.Panel1.Width, Me.Panel1.Height))     
bmp.Save("C:panel.jpg", System.Drawing.Imaging.ImageFormat.Jpeg)      
Panel1.Dock = DockStyle.Fill
  

Примечание: работает нормально