2009-04-14 4 views
3

C# 2005 Windows 응용 프로그램에서 여러 페이지 TIFF 파일을 미리보고 인쇄하려고합니다. 인쇄 잘 작동하지만 내 PrintDocument PrintPreviewDialog 보낼 때 첫 번째 페이지의 두 번째 이미지를 얻으려면 첫 번째 및 두 번째 페이지의 ameage. PrintPreviewControl을 사용할 때도 같은 문제가 발생합니다..Net에서 여러 페이지 tiff 파일을 미리 볼 수 없습니다.

다음은 두 개의 단추, PrintDocument 및 문제를 나타내는 PrintPreviewDialog가있는 양식 코드입니다. 닷넷 프레임 워크에서 PrintPreviewDialog에 문제가있을 경우

public partial class Form1 : Form 
{ 
    private Image m_Image; 
    private Int32 m_CurrentPage; 
    private Int32 m_PageCount; 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     m_Image = Image.FromFile(".\\Test-2-Page-Image.tif"); 
     m_PageCount = m_Image.GetFrameCount(FrameDimension.Page); 
    } 

    private void printDocument_BeginPrint(object sender, PrintEventArgs e) 
    { 
     m_CurrentPage = 0; 
     m_PageCount = m_Image.GetFrameCount(FrameDimension.Page); 
    } 

    private void printDocument_PrintPage(object sender, PrintPageEventArgs e) 
    { 
     m_Image.SelectActiveFrame(FrameDimension.Page, m_CurrentPage); 
     e.Graphics.DrawImage(m_Image, 0, 0); 
     ++m_CurrentPage; 
     e.HasMorePages = (m_CurrentPage < m_PageCount); 
    } 

    private void btnPreview_Click(object sender, EventArgs e) 
    { 
     printPreviewDialog.Document = printDocument; 
     printPreviewDialog.ShowDialog(); 
    } 

    private void btnPrint_Click(object sender, EventArgs e) 
    { 
     printDocument.Print(); 
    } 
} 

는 아는 사람 있나요 아니면 내가 뭔가 잘못하고있는 중이 야.

답변

3

이것은 Graphics.DrawImage() 기능의 버그입니다.

문제는 여기에 설명되어 있습니다 :

img.SelectActiveFrame(FrameDimension.Page, curPage); 
using(MemoryStream stm = new MemoryStream()) 
{  
    img.Save(stm, imgCodecInfo, encParams); // save to memory stream 
    Bitmap bmp = (Bitmap)Image.FromStream(stm); 
    e.Graphics.DrawImage((Image)bmp,0,0); 
    bmp.Dispose(); 
} 
: Graphics.DrawImage Bug

실무 코드는 다음과 같습니다