Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. QPainter drawtext blurred text
Forum Updated to NodeBB v4.3 + New Features

QPainter drawtext blurred text

Scheduled Pinned Locked Moved Solved General and Desktop
18 Posts 5 Posters 7.7k Views 3 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • PabloArgP Offline
    PabloArgP Offline
    PabloArg
    wrote on last edited by
    #1

    When I draw text on either Qpixmap, QImage or QPrinter, the letters look blurred when I use drawtext with QPainter.

    Any ideas?

    1 Reply Last reply
    0
    • Venkatesh VV Offline
      Venkatesh VV Offline
      Venkatesh V
      wrote on last edited by
      #2

      Hi @PabloArg ...
      use setRenderHints(QPainter::Antialiasing) with Qpainter.

      1 Reply Last reply
      3
      • PabloArgP Offline
        PabloArgP Offline
        PabloArg
        wrote on last edited by
        #3

        Hi Venkatesh, many thanks for your quick reply, but I tried with setRenderHints using the option that you mention as well I used TextAntialiing and I got same results.

        I using Qt creator qt-opensource-windows-x86-mingw530-5.8.0.

        QImage image(ancho,alto, QImage::Format_ARGB32);
        

        // image.fill(0);
        image.fill(Qt::white);
        QPainter painter;
        painter.setRenderHints(QPainter::Antialiasing);
        painter.begin(&image);
        painter.save();
        // painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
        painter.setFont(font);
        painter.setPen(QPen(Qt::black, 0, Qt::SolidLine, Qt::RoundCap));
        QRectF r1(0, 0, ancho-1,alto-1);
        // painter.drawRect(r1);
        painter.drawText(r1,Qt::AlignCenter,Texto);
        image.save("Texto.png");
        painter.restore();
        painter.end();

        painter.end();
        
        Venkatesh VV 1 Reply Last reply
        0
        • PabloArgP PabloArg

          Hi Venkatesh, many thanks for your quick reply, but I tried with setRenderHints using the option that you mention as well I used TextAntialiing and I got same results.

          I using Qt creator qt-opensource-windows-x86-mingw530-5.8.0.

          QImage image(ancho,alto, QImage::Format_ARGB32);
          

          // image.fill(0);
          image.fill(Qt::white);
          QPainter painter;
          painter.setRenderHints(QPainter::Antialiasing);
          painter.begin(&image);
          painter.save();
          // painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
          painter.setFont(font);
          painter.setPen(QPen(Qt::black, 0, Qt::SolidLine, Qt::RoundCap));
          QRectF r1(0, 0, ancho-1,alto-1);
          // painter.drawRect(r1);
          painter.drawText(r1,Qt::AlignCenter,Texto);
          image.save("Texto.png");
          painter.restore();
          painter.end();

          painter.end();
          
          Venkatesh VV Offline
          Venkatesh VV Offline
          Venkatesh V
          wrote on last edited by
          #4

          @PabloArg

          Once try with (QPainter::TextAntialiasing)

          1 Reply Last reply
          1
          • PabloArgP Offline
            PabloArgP Offline
            PabloArg
            wrote on last edited by
            #5

            I tried as well, same result

            1 Reply Last reply
            0
            • PabloArgP Offline
              PabloArgP Offline
              PabloArg
              wrote on last edited by
              #6

              Also I tried font.setStyleStrategy(QFont::PreferAntialias); unsuccessfully as well

              E 1 Reply Last reply
              0
              • PabloArgP PabloArg

                Also I tried font.setStyleStrategy(QFont::PreferAntialias); unsuccessfully as well

                E Offline
                E Offline
                Eeli K
                wrote on last edited by
                #7

                @PabloArg
                I'm not sure if I have understood the code snippets correctly, but in any case antialiasing makes the text (or any edge) blurred, that's its purpose, to smoothen out sharp edges. It should be turned off if you want sharp pixels.

                1 Reply Last reply
                0
                • PabloArgP Offline
                  PabloArgP Offline
                  PabloArg
                  wrote on last edited by
                  #8

                  Hi Eeli K, Well when you run the code Sharp edges are because setbold is false.
                  When setbold is true it looks blurry.

                  I will post my code again, when you get the picture open with GIMP or Other and make zoom up to 300 and will be very clear the problem.

                  QString Texto = QDateTime::currentDateTime().toString();
                  QFont font;
                  font.setBold(true);
                  font.setFamily("Helvetica");
                  font.setStyleStrategy(QFont::PreferAntialias);
                  font.setPixelSize(12);
                  font.setStyleHint(QFont::SansSerif,QFont::PreferOutline);
                  QFontMetrics fm(font);
                  qreal ancho = fm.width(Texto);
                  qreal alto = fm.height();
                  
                  QImage image(ancho,alto, QImage::Format_ARGB32);
                  //    image.fill(0);
                  image.fill(Qt::white);
                  QPainter painter;
                  painter.begin(&image);
                  painter.setRenderHints(QPainter::TextAntialiasing,true);
                  painter.setRenderHints(QPainter::Antialiasing,true);
                  painter.save();
                  //    painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
                  painter.setFont(font);
                  painter.setPen(QPen(Qt::black, 0, Qt::SolidLine, Qt::RoundCap));
                  QRectF r1(0, 0, ancho-1,alto-1);
                  //    painter.drawRect(r1);
                  painter.drawText(r1,Qt::AlignCenter,Texto);
                  //    painter.drawText(10,10,100,100,Qt::AlignCenter,Texto);
                  image.save("Texto.png");
                  painter.restore();
                  painter.end();
                  
                  jsulmJ 1 Reply Last reply
                  0
                  • PabloArgP PabloArg

                    Hi Eeli K, Well when you run the code Sharp edges are because setbold is false.
                    When setbold is true it looks blurry.

                    I will post my code again, when you get the picture open with GIMP or Other and make zoom up to 300 and will be very clear the problem.

                    QString Texto = QDateTime::currentDateTime().toString();
                    QFont font;
                    font.setBold(true);
                    font.setFamily("Helvetica");
                    font.setStyleStrategy(QFont::PreferAntialias);
                    font.setPixelSize(12);
                    font.setStyleHint(QFont::SansSerif,QFont::PreferOutline);
                    QFontMetrics fm(font);
                    qreal ancho = fm.width(Texto);
                    qreal alto = fm.height();
                    
                    QImage image(ancho,alto, QImage::Format_ARGB32);
                    //    image.fill(0);
                    image.fill(Qt::white);
                    QPainter painter;
                    painter.begin(&image);
                    painter.setRenderHints(QPainter::TextAntialiasing,true);
                    painter.setRenderHints(QPainter::Antialiasing,true);
                    painter.save();
                    //    painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
                    painter.setFont(font);
                    painter.setPen(QPen(Qt::black, 0, Qt::SolidLine, Qt::RoundCap));
                    QRectF r1(0, 0, ancho-1,alto-1);
                    //    painter.drawRect(r1);
                    painter.drawText(r1,Qt::AlignCenter,Texto);
                    //    painter.drawText(10,10,100,100,Qt::AlignCenter,Texto);
                    image.save("Texto.png");
                    painter.restore();
                    painter.end();
                    
                    jsulmJ Offline
                    jsulmJ Offline
                    jsulm
                    Lifetime Qt Champion
                    wrote on last edited by
                    #9

                    @PabloArg Nothing is blurred on my Windows 7 machine with your code. What I see is what antialising is doing.

                    https://forum.qt.io/topic/113070/qt-code-of-conduct

                    1 Reply Last reply
                    0
                    • PabloArgP Offline
                      PabloArgP Offline
                      PabloArg
                      wrote on last edited by
                      #10

                      The problem is, that I generate a PDF and when I print it looks bad.
                      Anyway I got this:
                      0_1486039313695_upload-6d303660-7657-49d8-90d4-9699ec719fce

                      jsulmJ 1 Reply Last reply
                      0
                      • PabloArgP PabloArg

                        The problem is, that I generate a PDF and when I print it looks bad.
                        Anyway I got this:
                        0_1486039313695_upload-6d303660-7657-49d8-90d4-9699ec719fce

                        jsulmJ Offline
                        jsulmJ Offline
                        jsulm
                        Lifetime Qt Champion
                        wrote on last edited by
                        #11

                        @PabloArg Image sharing is usually not working here. Please upload the picture to image sharing service and post the link here.

                        https://forum.qt.io/topic/113070/qt-code-of-conduct

                        1 Reply Last reply
                        0
                        • PabloArgP Offline
                          PabloArgP Offline
                          PabloArg
                          wrote on last edited by
                          #12

                          Hi jsulm, I cannot find the link that you suggest.

                          mrjjM 1 Reply Last reply
                          0
                          • PabloArgP PabloArg

                            Hi jsulm, I cannot find the link that you suggest.

                            mrjjM Offline
                            mrjjM Offline
                            mrjj
                            Lifetime Qt Champion
                            wrote on last edited by mrjj
                            #13

                            @PabloArg
                            Hi i use
                            www.postimage.org
                            and then just paste link here.
                            ( the Direct Link)

                            1 Reply Last reply
                            0
                            • PabloArgP Offline
                              PabloArgP Offline
                              PabloArg
                              wrote on last edited by
                              #14

                              https://postimg.org/image/yteihu8gz/9766cc13/

                              1 Reply Last reply
                              0
                              • mrjjM Offline
                                mrjjM Offline
                                mrjj
                                Lifetime Qt Champion
                                wrote on last edited by
                                #15

                                Ahh
                                Its when inside the PDF ?
                                Since you print it to image and then print image to pdf, its not
                                a vector font anymore.
                                its simply a image of a font/text and will get ugly when zoomed.

                                1 Reply Last reply
                                1
                                • PabloArgP Offline
                                  PabloArgP Offline
                                  PabloArg
                                  wrote on last edited by
                                  #16

                                  Mrjj you say that the Helvetic font is not vectorial, so if you know could you tell me some font that is vectorial on windows I will appreciate

                                  mrjjM 1 Reply Last reply
                                  0
                                  • PabloArgP PabloArg

                                    Mrjj you say that the Helvetic font is not vectorial, so if you know could you tell me some font that is vectorial on windows I will appreciate

                                    mrjjM Offline
                                    mrjjM Offline
                                    mrjj
                                    Lifetime Qt Champion
                                    wrote on last edited by mrjj
                                    #17

                                    @PabloArg
                                    No, not like that.
                                    It is vector but you make it part of an image and i think
                                    what you mean is that is not scaling nicely as other text in pdf normally do ?
                                    The reason for that is its no longer text, just pixels on image.

                                    Try drawing the text directly on the Printer painter
                                    QPrinter printer;
                                    QPainter painter(&printer);
                                    printer.setOutputFileName("c:\temp\file.pdf");
                                    printer.setOutputFormat(QPrinter::PdfFormat);
                                    painter.drawText(xxx)

                                    1 Reply Last reply
                                    1
                                    • PabloArgP Offline
                                      PabloArgP Offline
                                      PabloArg
                                      wrote on last edited by
                                      #18

                                      mrjj. Make sense that you say. I saw that if I draw directly using qpdfwriter the text looks good.
                                      So, I will follow your advise, write directly on QPrinter or qpdfwriter.

                                      Many thanks everybody

                                      1 Reply Last reply
                                      1

                                      • Login

                                      • Login or register to search.
                                      • First post
                                        Last post
                                      0
                                      • Categories
                                      • Recent
                                      • Tags
                                      • Popular
                                      • Users
                                      • Groups
                                      • Search
                                      • Get Qt Extensions
                                      • Unsolved