Avatar billede azzodiac Nybegynder
27. april 2005 - 21:58 Der er 3 kommentarer og
1 løsning

Print billede

Hejsa.

Jeg har et billede i en PictureBox.

Hvordan kan jeg printe billedet på min printer, så billedet skaleres til at fylde hele bredden på et stykke A4 papir?

På forhånd tak.
Avatar billede nielle Nybegynder
28. april 2005 - 22:11 #1
PageSettings _PageSettings = new PageSettings();

private void menuItem2_Click(object sender, System.EventArgs e)
{
    if (pictureBox1.Image == null)
        MessageBox.Show("Intet billede at printe.");
    else
    {
        // Brug "using System.Drawing.Printing;" i toppen af koden.
        PrintDocument PD = new PrintDocument();
        PD.DefaultPageSettings = _PageSettings;
        PD.PrintPage += new PrintPageEventHandler(this.PD_PrintPage);

        printDialog1.Document = PD;
        if (printDialog1.ShowDialog() == DialogResult.OK)
        {
            PD.Print();
        }
    }
}

private void menuItem3_Click(object sender, System.EventArgs e)
{
    pageSetupDialog1.PageSettings = _PageSettings;
    pageSetupDialog1.ShowDialog();
}

private void PD_PrintPage(object sender, PrintPageEventArgs ev)
{
    // Den faktor vi skal skalere billedet med for at det passer i sidens højde.
    float FactorHeight = (float)ev.MarginBounds.Height/(float)pictureBox1.Image.Height;

    // Den faktor vi skal skalere billedet med for at det passer i sidens bredde.
    float FactorWidth = (float)ev.MarginBounds.Width/(float)pictureBox1.Image.Width;

    // Vi skal bruge den mindste - ellers passer billedet ikke på siden.
    float Factor = Math.Min(FactorHeight, FactorWidth);

    float Left = 0, Right = 0;
    float Top = 0, Bottom = 0;

    if (FactorHeight > Factor)
    { // Billedet kommer ikke til at fylde hele sidens højde.

        // Billedet fylder sidens bredde.
        Left = ev.MarginBounds.Left;
        Right = ev.MarginBounds.Right;

        // Billedet skal centreres i højden.
        float NewHeight = Factor * pictureBox1.Image.Height;
        float Delta = ((float)ev.MarginBounds.Bottom - (float)ev.MarginBounds.Top - NewHeight) / 2;
        Top = ev.MarginBounds.Top + Delta;
        Bottom = ev.MarginBounds.Bottom - Delta;
    }
    else
    { // Billedet kommer ikke til at fylde hele sidens bredde.

        // Billedet fylder sidens højde.
        Top = ev.MarginBounds.Top;
        Bottom = ev.MarginBounds.Bottom;

        // Billedet skal centreres i bredden.
        float NewWidth = Factor * pictureBox1.Image.Width;
        float Delta = ((float)ev.MarginBounds.Right - (float)ev.MarginBounds.Left - NewWidth) / 2;
        Left = ev.MarginBounds.Left + Delta;
        Right = ev.MarginBounds.Right - Delta;
    }

    // Opret et RectangleF som skal angive hvor billedet skal placeres på siden.
    RectangleF ImageArea = new RectangleF(Left, Top, Right-Left, Bottom-Top);

    // Tegn billedet i området angivet ved ImageArea.
    ev.Graphics.DrawImage(pictureBox1.Image, ImageArea);           
}
Avatar billede azzodiac Nybegynder
02. maj 2005 - 18:30 #2
Fornemt. Det var lige hvad jeg skulle bruge. Læg bare et svar.
Avatar billede nielle Nybegynder
02. maj 2005 - 20:07 #3
Svar :^)
Avatar billede nielle Nybegynder
02. maj 2005 - 21:15 #4
Takker for point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester