2014-12-30 4 views
0

나는 도형을 PrintDocument에 그리는 방법과 특정 크기의 용지를 인치로 그리는 방법을 알아 내려고하고 있습니다.인쇄 해상도

private void DrawShapes(Graphics graphics) 
     { 
     graphics.DrawRectangle(new Pen(Color.HotPink), new Rectangle(0, 0, (int)Math.Round(1 * graphics.DpiX), (int)Math.Round(1 * graphics.DpiY))); 
     graphics.DrawRectangle(new Pen(Color.HotPink), new Rectangle(0, 0, (int)Math.Round(1.5 * graphics.DpiX), (int)Math.Round(1.5 * graphics.DpiY))); 
     graphics.DrawRectangle(new Pen(Color.HotPink), new Rectangle(0, 0, (int)Math.Round(2 * graphics.DpiX), (int)Math.Round(2 * graphics.DpiY))); 
     graphics.DrawRectangle(new Pen(Color.HotPink), new Rectangle(0, 0, (int)Math.Round(2.5 * graphics.DpiX), (int)Math.Round(2.5 * graphics.DpiY))); 
     } 

     protected override void OnPaint(PaintEventArgs e) 
     { 
     base.OnPaint(e); 

     DrawShapes(e.Graphics); 
     } 

     private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) 
     { 
     DrawShapes(e.Graphics); 
     } 

이는 OnPaint 기능에서 Graphics 객체에 대해 잘 작동하지만 밖으로 인쇄가 잘못 : 나는이 내가 시작 무엇입니까 PrintDocument

의 DPI에 대한 혼란 스러워요. 약간의 디버깅을 수행하여 이벤트의 이벤트의 DPI가 크다는 것을 알았지 만 (코드를 실행했을 때 600) 페이지의 경계는 1100에서 850입니다. 따라서 인쇄 할 때 DPI를 100으로 사용하고 폼에 드로잉 할 때 그래픽의 DPI. 이것은 완벽하게 작동했습니다.

내가 얻지 못하는 것은 PrintDocument이 DPI를 어떻게 다루는가입니다. PrintPage 이벤트의 Graphics 개체에 다른 DPI가 있다고 표시 되더라도 PrintDocument은 항상 실제 DPI가 100입니까? 인쇄 할 때 96dpi로 그리고 그림을 인쇄 할 때 100dpi로 생각하면 문제가 발생합니까?

답변

1

PrintPage 이벤트 처리기에서 가져온 Graphics 개체는 GraphicsUnit.Display으로 설정된 Graphics.PageUnit 속성으로 초기화되었습니다. 이렇게하면 프린터 해상도에 관계없이 출력물의 크기를 조정할 수 있습니다. 100 픽셀을 그리는 선은 종이에 1 인치가됩니다. 300 또는 600 dpi 프린터를 사용하면 문제가되지 않습니다. 미국에서 850x1100 크기의 용지 크기가 8.5 x 11 인치 크기 였는지 확인하십시오.

이 선택 사항은 우연한 것이 아니며 모니터의 기본 dpi에 가깝습니다. 따라서 화면에 그려주는 코드를 사용하여 프린터에 그릴 수 있습니다. 그리고 프린터의 해상도가 훨씬 더 높더라도 용지의 크기는 거의 같습니다. 이 설정을 변경할 이유가 거의 없습니다.

+0

고맙습니다! 그래픽 장치가 표시되도록 설정되었는지 알지 못했습니다. 나는 약간의 연구를했으며 훨씬 더 의미가 있습니다. 나는 대답을 주셔서 감사합니다 :) –