(QT) C++ 에서 drawtext 할때 폰트의 선명도?가 다른 이유가 뭘까요?
글쓴이: pogusm / 작성시간: 수, 2013/03/13 - 5:00오전
위 이미지는, 첨부한 소스(QT C++)코드의 실행 결과입니다.
(폰트의 선명도가 차이가 납니다. 특히 Format_Mono, Format_ARGB32 일때 그렇습니다)
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); QImage image1 = QImage(500, 100, QImage::Format_Mono); QPainter painter1(&image1); painter1.fillRect(image1.rect(), Qt::white); painter1.setFont(QFont("Consolas", 15)); painter1.drawText(0, 0, 500, 100, Qt::AlignCenter, trUtf8("QImage::Format_Mono")); painter1.end(); ui->label_1->setPixmap(QPixmap::fromImage(image1)); QImage image2 = QImage(500, 100, QImage::Format_RGB32); QPainter painter2(&image2); painter2.fillRect(image2.rect(), Qt::white); painter2.setFont(QFont("Consolas", 15)); painter2.drawText(0, 0, 500, 100, Qt::AlignCenter, trUtf8("QImage::Format_RGB32")); painter2.end(); ui->label_2->setPixmap(QPixmap::fromImage(image2)); QImage image3 = QImage(500, 100, QImage::Format_ARGB32); QPainter painter3(&image3); painter3.fillRect(image3.rect(), Qt::white); painter3.setFont(QFont("Consolas", 15)); painter3.drawText(0, 0, 500, 100, Qt::AlignCenter, trUtf8("QImage::Format_ARGB32")); painter3.end(); ui->label_3->setPixmap(QPixmap::fromImage(image3)); QImage image4 = QImage(500, 100, QImage::Format_ARGB32_Premultiplied); QPainter painter4(&image4); painter4.fillRect(image4.rect(), Qt::white); painter4.setFont(QFont("Consolas", 15)); painter4.drawText(0, 0, 500, 100, Qt::AlignCenter, trUtf8("QImage::Format_ARGB32_Premultiplied")); painter4.end(); ui->label_4->setPixmap(QPixmap::fromImage(image4)); }
핵심 코드의 내용은 위와 같은데요...
QImage 의 포맷이 Format_Mono, Format_RGB32, Format_ARGB32, Format_ARGB32_Premultiplied 일때
drawText된 폰트 이미지의 선명도가 차이가 납니다.
Format_Mono 일때에도 뚜렷한 결과를 얻고 싶은데...
원인이 무엇인지 감이 안잡히네요...
조언 부탁드립니다~ 꾸벅~
감사합니다.
File attachments:
첨부 | 파일 크기 |
---|---|
![]() | 2.32 KB |
![]() | 31.08 KB |
Forums:
포맷에 모든 내용이 담겨있습니다.Mono는 흑백의
포맷에 모든 내용이 담겨있습니다.
Mono는 흑백의 2색만으로 표현하니까 가장 안좋고, RGB32는 알파채널이 없으므로 경계가 부드럽지 못합니다.
원리적으로 Format_ARGB32와 Format_ARGB32_Premultiplied는 결과가 같아야 하는데 그림처럼 다르다면 뭔가 내부적으로 최적화 루틴이 존재해서 결과가 달라졌거나, Qt의 버그인듯하네요.
색은 2색을 쓰면서 트루컬러급의 화질을요구하는건, 도둑놈심보라고도 할 수 있습니다:)
Mono로 깨끗한 결과를 얻으려면 ttf가 아닌 비트맵폰트를 이용해야합니다.
빠르고 정확한 답변 감사합니다.
단순히 텍스트를 검은색으로 출력하는거니까 Mono 로 출력할때도
깨끗하게 나와야 정상이라고 생각했던 저의 생각이 잘못된 것이었군요.
적절한 비트맵 폰트를 찾아봐야겠습니다
감사합니다.
꾸벅~
댓글 달기