2011-05-14 6 views
4

저장하고 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); 

답변

9

여기

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); 
    } 

을 다음과 같은 시도 내 결과입니다

양식 스크린 샷 :

enter image description here

저장된 비트 맵 :

enter image description here

이 텍스트 상자 느릅 나무 양식에 표시되지 않지만 저장된 비트 맵에 존재하는 당신이 볼 수 있듯이

+0

작업 폼이 실제로 화면에 그려지기 전에 (나 같은) 패널을 저장하려고 시도하는 경우. –

+0

당신의 솔루션은 나를 위해 일했지만 두 번 그려진 패널의 컨트롤! 그래서 자식 컨트롤을 조정하기 전에 IF (컨트롤이 패널이 아닙니다)로 고정했습니다. –

1
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 

: 그것이 또한 솔루션 미세