IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

object graphics - Qualité


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juillet 2012
    Messages : 11
    Par défaut object graphics - Qualité
    Bonjour,

    Je me suis fais une petite application de reporting utilisant des graphics. Tout fonctionne très bien mais la qualité d'affichage et d'impression est très discutable. Les lettres sont un peu floues, comme trouées, comme si on était en mode économie d'encre, ce qui n'est pas le cas. Comment obtenir des belles lettres claires et bien définies?

    Voici le code de création de la page:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
        Public Shared Sub PageMaker()
            Page += 1 'On incrémente le nombre de page
     
            'On redimensionne les tableaux
            ReDim Preserve objbitmap(Page)
            ReDim Preserve objGraphics(Page)
     
            'Creation d'objet avec Set la mise en page
            objbitmap(Page) = New Bitmap(1275, 1665)
            objbitmap(Page).SetResolution(150, 150)
     
            'Association Bitmap-Graphic et Remplissage en blanc
            objGraphics(Page) = Graphics.FromImage(objbitmap(Page))
            objGraphics(Page).FillRectangle(Brushes.White, 0, 0, objbitmap(Page).Width, objbitmap(Page).Height)
     
            'Caractéristique de qualité du GRAPHICS
            objGraphics(Page).SmoothingMode = Drawing2D.SmoothingMode.HighQuality
            objGraphics(Page).TextRenderingHint = Drawing.Text.TextRenderingHint.AntiAlias
            objGraphics(Page).CompositingQuality = Drawing2D.CompositingQuality.HighQuality
     
            frmSReport.NBXNoPage.Maximum = Page + 1
     
        End Sub
    Et un exemple de code qui plaque du texte sur la page:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
        Shared Sub FDrawer(ByVal page As Integer, ByVal Name As String, ByVal POSX As Integer, ByVal POSY As Integer, ByVal AlignFAR As Boolean, ByVal SIZE As Integer, ByVal APOSX As Integer, ByVal APOSY As Integer, ByVal TEXT As String, ByVal WIDTH As Integer)
            'dimension et ajustement du texte
            If SIZE = 0 Then SIZE = 15
            If Name.Length > WIDTH Then WIDTH = Name.Length
     
            TEXT = Mid(TEXT, 1, WIDTH)
     
            ' Creation font et brush.
            Dim drawFont As New Font("Arial", SIZE)
            Dim FdrawBrush As New SolidBrush(Color.Black)
            Dim FdrawFormat As New StringFormat
     
            'Alignement
            If AlignFAR Then
                FdrawFormat.Alignment = StringAlignment.Far
            Else
                FdrawFormat.Alignment = StringAlignment.Near
            End If
     
            'Creation du point d'entrée du texte
            Dim FDrawpoint As New PointF(POSX, POSY)
     
            ' Drawing
            objGraphics(page).DrawString(TEXT, drawFont, FdrawBrush, FDrawpoint, FdrawFormat)
     
        End Sub
    J'ai bien essayé de jouer avec les paramètres Smoothingmode, TextRenderingHint et CompositingQuality, mais je n'arrive pas a trouver la bonne combinaison, ou il me manque quelque chose. J'ai augmenté ma résolution mais ce n'est pas vraiment mieux. Pouvez-vous m'aider?

    merci

  2. #2
    Membre très actif
    Homme Profil pro
    Retraité intello
    Inscrit en
    Juillet 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité intello

    Informations forums :
    Inscription : Juillet 2012
    Messages : 186
    Par défaut
    Bonjour morkitu

    J'ai déjà rencontré ce problème. Après beaucoup d'essais infructueux, je me suis résigné à un artifice. Je dessine ce qu'il faut sur un PictureBox, puis je récupère ce dessin par une capture d'écran (à l'aide de la méthode CopyFromScreen).

    Cordialement.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juillet 2012
    Messages : 11
    Par défaut
    Bonjour,

    Merci pour la réponse. Malheureusement cette solution ne peut pas m'aider, parce que le rapport à l'écran présente les mêmes imperfections que sur papier, et que le rapport déborde de l'écran (scrollbar).

    J'ai l'impression qu'il me manque un détail... Je poursuis les recherches!

    merci

  4. #4
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Pour la qualité de l'image tu as aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    objGraphics(Page).InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
    Je ne sais pas ce que ca pourrait donner car je ne travaille pas sur des graphiques mais sur des qualités d'images directement !

    PS : la fonction copyscreen me parait être une bonne alternative

  5. #5
    Membre très actif
    Homme Profil pro
    Retraité intello
    Inscrit en
    Juillet 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité intello

    Informations forums :
    Inscription : Juillet 2012
    Messages : 186
    Par défaut
    Bonjour Morkitu

    Pourriez-vous m'indiquer la version de vb.net que vous utilisez ?

    Merci.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juillet 2012
    Messages : 11
    Par défaut
    Bonjour,

    J'utilise VB 2010 Express.

  7. #7
    Membre très actif
    Homme Profil pro
    Retraité intello
    Inscrit en
    Juillet 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité intello

    Informations forums :
    Inscription : Juillet 2012
    Messages : 186
    Par défaut
    Bonjour.

    Moi aussi je travaille sous vb 2010. J'ai en conséquence effectué quelques tests. Je vous en fait un compte rendu.

    1. Dessiner du texte sur un bitmap donne un résultat peu satisfaisant.
    2. Dessiner du texte sur un PictureBox et récupérer dans un bitmap le dessin à l'aide de la méthode CopyToScreen donne un résultat très satisfaisant. Mais l'impression de ce bitmap donne un mauvais résultat.
    3. Imprimer une photo (.jpg) donne un résultat très satisfaisant.
    4. On convertit un bitmap en photo à l'aide de Paint (au charge le bitmap, et on l'enregistre en tant que .jpg).

    Peut-être cela vous aidera-t-il.

    Cordialement.

    PS. La question de la taille peut probablement se régler par dessin d'un bitmap sur un autre, avec le décalage voulu, mais je n'ai pas testé.

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juillet 2012
    Messages : 11
    Par défaut
    Merci de votre aide, je vais faire quelques tests demain et je vous reviens. Je ne savais pas qu'on pouvait dessiner directement sur la picturebox.

    Voici la différence entre un rapport produit par une application concurrente et un produit par la mienne:



    Celui sur la gauche est absolument parfait (les petits défauts qu'on voit ici sont dus à la photo). J'espère parvenir à ce résultat!

    A bientôt et merci
    Images attachées Images attachées  

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juillet 2012
    Messages : 11
    Par défaut
    Rebonjour!

    Je constate en regardant attentivement les deux images que la police est différente (le R est différent)... Je me demande si la police peut jouer sur la qualité d'une quelconque façon.

  10. #10
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    bonjour morkitu

    Active le rendu des polices cleartype sous windows xp.......

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     'Caractéristique de qualité du GRAPHICS
             objGraphics(Page).TextRenderingHint  = Drawing.Text.TextRenderingHint.ClearTypeGridFit
    bon code............

  11. #11
    Membre très actif
    Homme Profil pro
    Retraité intello
    Inscrit en
    Juillet 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité intello

    Informations forums :
    Inscription : Juillet 2012
    Messages : 186
    Par défaut
    Bonjour morkitu.

    Pour votre gouverne, sachez que tout contrôle hérite de la classe Control, laquelle possède l'événement Paint. Et voila pourquoi vous pouvez dessiner sur n'importe quel contrôle.


    Cordialement.

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juillet 2012
    Messages : 11
    Par défaut
    Le highqualitybicubic et l'activation du cleartype ont bien été efficaces lors de l'affichage des bitmaps dans la picturebox, l'impression est améliorée, voire acceptable pour mes besoins, mais pas parfaite comme l'application concurrente.

    En creusant, inspiré par le dernier post, je sais maintenant en partie comment atteindre cette perfection.

    Si je fait ainsi ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
        Public Shared Sub PageMaker()
            Page += 1 'On incrémente le nombre de page
     
            'On redimensionne les tableaux
            ReDim Preserve objbitmap(Page)
            ReDim Preserve objGraphics(Page)
     
            'Creation d'objet avec Set la mise en page
            objbitmap(Page) = New Bitmap(1275, 1650)
            objbitmap(Page).SetResolution(150, 150)
     
            'Association Bitmap-Graphic et Remplissage en blanc
            objGraphics(Page) = Graphics.FromImage(objbitmap(Page))
            objGraphics(Page).FillRectangle(Brushes.White, 0, 0, objbitmap(Page).Width, objbitmap(Page).Height)
     
            frmSReport.NBXNoPage.Maximum = Page + 1
     
    		' Creer font brush position.
            Dim drawFont As New Font("arial", 10)
            Dim drawBrush As New SolidBrush(Color.Black)
            Dim drawPoint As New PointF(10,10)
     
    		'Dessin des string TEST(X)
    		For X as integer = 10 to 50 step 10
    			objGraphics(page).DrawString("TEST" & X, drawFont, drawBrush, drawPoint)
    			drawpoint= new pointF(10,X)
    		Next
     
    		'Impression
    		PrintDocument1.Print()
     
        End Sub
     
    	Private Sub PrintDocument1_PrintPage_1(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
     
            Dim newMargins As System.Drawing.Printing.Margins = New System.Drawing.Printing.Margins(0.2, 0.2, 0.2, 0.2)
            PrintDocument1.DefaultPageSettings.Margins = newMargins
            e.Graphics.DrawImage(PageReport.bitmap(0), 0, 0)
            PrintDocument1.PrinterSettings.PrinterName = "CutePDF Writer"
        End Sub
    J'obtiens ceci:



    Mais si je ne passe pas par la création d'un bitmap, mais que je passe le tout par le Graphics de l'imprimante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
       Private Sub btnPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrint.Click
            PrintDocument1.Print()
       End Sub
     
    Private Sub PrintDocument1_PrintPage_1(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
     
            'Setup des marges
            Dim newMargins As System.Drawing.Printing.Margins
            newMargins = New System.Drawing.Printing.Margins(0.2, 0.2, 0.2, 0.2)
            PrintDocument1.DefaultPageSettings.Margins = newMargins
     
            ' Cree font and brush et postition.
            Dim drawFont As New Font("arial", 9)
            Dim drawBrush As New SolidBrush(Color.Black)
            Dim drawPoint As New PointF
     
            ' Draw string
            For x As Integer = 20 To 100 Step 20
                drawPoint = New PointF(10, x)
                e.Graphics.DrawString("TEST" & x, drawFont, drawBrush, drawPoint)
            Next
     
            PrintDocument1.PrinterSettings.PrinterName = "CutePDF Writer"
     
        End Sub
    j'obtiens cela!


    Je creuserai d'avantage de ce coté éventuellement.

    A+ et merci

    Morkitu
    Images attachées Images attachées   

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 11/11/2012, 14h31
  2. Réponses: 18
    Dernier message: 03/04/2011, 16h13
  3. Qualité d'impression sur Graphics
    Par Papy214 dans le forum Windows Forms
    Réponses: 9
    Dernier message: 02/09/2009, 15h59
  4. Pb object graphics
    Par glouffy6 dans le forum C#
    Réponses: 8
    Dernier message: 13/01/2009, 21h35
  5. [Débutant] Graphics Mauvaise Qualité
    Par Duc Lebowski dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 07/03/2008, 16h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo