2010-08-16 1 views
1

크기가 2x2 인치 인 이미지를 인쇄하려고합니다. 해상도를 기준으로 인치 (픽셀 단위)의 변환 함수를 만들었습니다. 그러나 결과는 2x2 인치에서 멀리 떨어져 있으며, 인쇄는 전체 시트에 거의 맞지 않는 이미지를 생성합니다! 내가 뭐 잘못하고있는거야?PrintDocument_PrintPage 및 Graphics.DrawImage 크기 (인치)

Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage 

    Dim graph = e.Graphics 
    e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.HighQuality 
    e.Graphics.CompositingQuality = Drawing2D.CompositingQuality.HighQuality 


    Dim photo = Image.FromFile("C:\Users\Public\Pictures\Sample Pictures\Koala.jpg") 
    graph.DrawImage(photo, New RectangleF(0, 0, InchToPx(graph.DpiX, 2), InchToPx(graph.DpiY, 2))) 

End Sub 


Private Function InchToPx(ByVal dpi As Single, ByVal inches As Single) As Single 

    Return (inches * dpi) 

End Function 

답변

3

네, 그게 올바른 방법은 아닙니다. Graphics.Dpix는 일반적으로 인치당 600 도트의 해상도를 반환합니다. 그러나 당신이 그리는 것은 해상도에 독립적입니다. 따라서 사용자가 300 dpi 해상도로 다른 프린터를 선택할 때 특별한 작업을 수행 할 필요가 없습니다. 중요하지 않으면 문서가 두 배나 커지고 용지에 더 이상 적합하지 않기 때문입니다.

해상도 독립적 매핑은 Graphics.PageUnit에 의해 결정됩니다. 기본값은 1 픽셀을 0.01 인치로 만드는 디스플레이입니다. 즉, 2 x 2 인치 인쇄물을 얻으려면 200 x 200의 직사각형을 사용하면됩니다. 정말로 원하는 경우 PageUnit을 변경할 수 있습니다. Inches는 설정 중 하나입니다. 그런 다음 2x2 직사각형을 사용합니다. 물론 PointF 및 RectangleF를 사용하는 Graphics 메서드 오버로드를 사용해야 할 경우 정수 버전이 제대로 작동하지 않습니다.

기본값 (표시)은 사용자가 프린터에서 그리는 것과 동일한 크기로 화면에 그리는 것을 만들기 때문에 편리합니다. 디스플레이의 일반적인 해상도는 96 dpi이므로 1 pix == 0.01 "에 가까워 화면에 내용을 그리는 코드를 다시 사용하여 프린터에 그릴 수 있습니다.

+0

*에 대한 일반적인 해결책 디스플레이는 96 dpi *입니다. >> 실제로 이것은 공통 *입니다.하지만 많은 사람들 (시력 문제가있는 사람들)이 이것을 120 dpi 이상으로 설정했으며 Mac (아마도 .NET의 후보는 아닙니다. 하지만 여전히 Mac에서 실행되는 Silverlight는 기본적으로 72 dpi를 사용합니다.) * "같은 크기"*는 상대적으로 만 사용되며 화면의 픽셀 크기는 다양합니다. – Abel