[vb.net] Kwaliteit van het printen in vb.net

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • 0123456
  • Registratie: Maart 2005
  • Laatst online: 28-07-2010
Ik heb hier een applicatie herschreven van VB6 naar vb.net.
Ik moet hierin een foto afdrukken op een foto printer.

Nu kon ik heel eenvoudig in vb6 een form printen met:
code:
1
 test_form.PrintForm

Hiermee kwam een perfecte randloze foto uit de printer

Nu doe ik hetzelfde met vb.net met:
code:
1
2
3
4
5
6
7
PrintForm1.PrinterSettings.DefaultPageSettings.Margins.Top = 0
PrintForm1.PrinterSettings.DefaultPageSettings.Margins.Left = 0
PrintForm1.PrinterSettings.DefaultPageSettings.Margins.Right = 0
PrintForm1.PrinterSettings.DefaultPageSettings.Margins.Bottom = 0
PrintForm1.PrinterSettings.DefaultPageSettings.PrinterResolution.Kind = Printing.PrinterResolutionKind.High

PrintForm1.Print(pic_form, PowerPacks.Printing.PrintForm.PrintOption.ClientAreaOnly)


Nu komt er met deze code ook een randloze foto uit de printer.

Mijn probleem is nu eigenlijk dat de kwaliteit van de foto die met vb.net gemaakt wordt slechte kwaliteit heeft. Je ziet vrij grove pixels zitten en alles is heel blokkerig (pixelig).

Wat kan ik eraan doen om de foto van een betere kwaliteit te krijgen?

PS. Ik print trouwens met een Mitsubishi CP9550DW en volgens mij ligt het niet daaraan. Is echt vb.net die slechte kwaliteit uitstuurd

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Ken vb.net niet, maar ik zou eens in de help duiken hoe je nou iets moet uitprinten.

Want ik heb het vermoeden dat vb.net je plaatje op je form aanpast naar schermresolutie en dat een optie als : .PrintOption.ClientAreaOnly niet echt ertoe bijdraagt dat je plaatje high res behandeld gaat worden.

Als ik het zo lees zeg je tegen de printer dat hij in high-res moet printen, maar hij moet volgens mij alleen de resolutie die er in het form overblijft uitprinten en niet het originele plaatje...

Acties:
  • 0 Henk 'm!

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 18-03 09:33

_Thanatos_

Ja, en kaal

Sowieso als je een form print, print je de pixels zoals die op het scherm staan, terwijl hopelijk je foto wel een hogere pixeldichtheid heeft die meer voor geprinte media geschikt is. Je kunt dus beter uitzoeken hoe je handmatig naar de printer kan "tekenen" zodat je geen beeldinformatie weglaat op papier.

日本!🎌


Acties:
  • 0 Henk 'm!

Anoniem: 14829

Idd, je print nu in 72 DPI (de standaard instelling van je scherm) terwijl je fotoprinter waarschijnlijk wel 1200 of 2400 DPI aankan.

Acties:
  • 0 Henk 'm!

  • 0123456
  • Registratie: Maart 2005
  • Laatst online: 28-07-2010
Hoe kan ik dit het beste in code doen?
Want op internet kan ik alleen maar vinden hoe ze een plaatje eerst laden in een Graphics.DrawImage(), is dit de beste methode?

Acties:
  • 0 Henk 'm!

Anoniem: 14829

Jep.

Acties:
  • 0 Henk 'm!

108886

(pssst: als je drukkwaliteit nodig hebt, zal 300dpi zeker volstaan ;) tis maar dat je niet gaat lopen printen op 1000dpi of zo :p )

Acties:
  • 0 Henk 'm!

Anoniem: 14829

Voor drukwerk is 300 DPI meer dan voldoende, maar voor foto's is 1200 of 2400 horizontaal/1200 verticaal wel heel erg prettig. OK een inkjet haalt in de praktijk die resolutie niet vanwege de grootte van de druppeltjes, maar het eindresultaat is wel dat de foto veel 'analoger' over komt dan op 300 DPI.

Acties:
  • 0 Henk 'm!

  • MrSleeves
  • Registratie: Februari 2004
  • Laatst online: 22-11-2024

MrSleeves

You'll thank me later.

Het is misschien handig als je nog wat meer info geeft. Welke class is PrintForm1 (gewoon een Form?) en hoe kom je aan PrinterSettings?

Normaal gesproken heb je een object van de PrintDocument class nodig. Die geef je het commando Print en daarna vang je het PrintPage event af. In de PrintPageEventArgs zit een Graphics-object van de pagina die je print. Eventueel kan je met HasMorePages aangeven of je nog een pagina wilt printen (waarna er een nieuwe PrintPage event wordt afgevuurd). M.b.v. PrintPageEventArgs zijn er allerlei instellingen aan te passen (ook resoluties e.d.).

30Drie Web Design & IT Consultancy | Raven Consultancy Services


Acties:
  • 0 Henk 'm!

  • 0123456
  • Registratie: Maart 2005
  • Laatst online: 28-07-2010
Ik heb nu dus een PrintDocument toegevoegd aan mijn form en in de code het volgende:

code:
1
2
3
4
Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage

e.Graphics.DrawImage(System.Drawing.Image.FromFile(pic_form.Image1.ImageLocation), New Point(0, 0))
End Sub

Nu wordt het plaatje op goede kwaliteit afgedrukt, alleen vallen er nu delen weg.
Alleen 1/4e deel van de foto is te zien (rechter bovenhoek)

Waar stel ik de print margins in van de afdruk?

Ik heb het volgende geprobeerd, maar dit werkt niet:
code:
1
2
3
4
5
6
7
Private Sub PrintDocument1_QueryPageSettings(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.QueryPageSettingsEventArgs) Handles PrintDocument1.QueryPageSettings
        
Dim newMargins As System.Drawing.Printing.Margins
newMargins = New System.Drawing.Printing.Margins(0, 0, 0, 0)
e.PageSettings.Margins = New Margins   
'PrintDocument1.PrinterSettings.DefaultPageSettings.Margins = New Margins werkt ook niet..
End Sub

Acties:
  • 0 Henk 'm!

  • MrSleeves
  • Registratie: Februari 2004
  • Laatst online: 22-11-2024

MrSleeves

You'll thank me later.

Is dat niet iets dat je instelt voordat je de Print method aanroept?
M.b.v. PrintDocument.DefaultPageSettings wellicht?

30Drie Web Design & IT Consultancy | Raven Consultancy Services


Acties:
  • 0 Henk 'm!

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 01:47
Misschien is het idee om een keer een goed .Net boek te kopen in plaats van voor al deze (sorry hoor:) basic dingen een topic te openen?

Roomba E5 te koop


Acties:
  • 0 Henk 'm!

  • 0123456
  • Registratie: Maart 2005
  • Laatst online: 28-07-2010
De DefaultPageSettings.Margins werkt dus niet.
Dan ben ik dus een balk rechts en onder de foto kwijt.

Iemand nog een andere methode die wel kan werken?

Acties:
  • 0 Henk 'm!

  • 0123456
  • Registratie: Maart 2005
  • Laatst online: 28-07-2010
Ik heb het al gevonden:
code:
1
2
3
4
5
Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
  e.Graphics.DrawImage(System.Drawing.Image.FromFile(pic_form.Image1.ImageLocation), e.Graphics.VisibleClipBounds) ' New Point(0, 0))
End Sub

PrintDocument1.Print()


Deze code is genoeg om de afbeelding uit het bestand te halen en zonder raden op goede kwaliteit af te drukken.

PS. Heb hier Step-by-Step VB 2008 en Visual Basic 2008 - Programmer's Reference, deze gaven hier beide geen duidelijke info over, vandaar dit forum
Pagina: 1