2012-03-19 2 views
1

Qt 4.7을 사용하고 있습니다. 내가 원하는 :이미지로 텍스트를 채우는 방법; 스케일 & 센터링 (수직 및 수평)?

  1. 채우기 텍스트 이미지
  2. 그 이미지가 텍스트의 크기를 조정할 수 할과 (문자, eg'A ') (글꼴 크기의 변화에 ​​따라 변화)
  3. 그 이미지가 그 텍스트의 중심으로부터 수직 및 수평으로 센터링되기를 원한다. 이 하나 개의 문자를 달성

    enter image description here

, 나는 범위에서 많은 문자에 대해 동일한 작업을 수행 할 (같은 : 'A'- 'H') 문자열에서, 또는 문자로 입력 실행 시간. 이 현재 내가 사용하고이 기술에 대한

: 나는 결과를 얻고 있지만,이 CSS 또는 기타 방법으로 정렬해야하는 경우와 같이 이미지가 제대로 중심으로되지

[ bgTextImage.h ] 
QTextCursor cursor; 
QTextCharFormat format; 
QString imageFileName 

[ bgTextImage.cpp ] 
cursor = ui->textEdit->textCursor(); 
QPixmap pic(imageFileName); 
QFontMetrics fontMetrics(format.font()); 
QSize fMSize = fontMetrics.size(0, "A", 0, 0); 
QPixmap newPixmap = pic.scaled(fMSize, Qt::KeepAspectRatioByExpanding, Qt::SmoothTransformation); 

if(newPixmap.width() > fMSize.width()) 
{ 
    int x = (newPixmap.width() - fMSize.width())/2; 
    newPixmap = newPixmap.copy(x, newPixmap.rect().y(), fMSize.width(), fMSize.height()); 
} 

if(newPixmap.height() > fMSize.height()) 
{ 
    int y = (newPixmap.height() - fMSize.height())/2; 
    newPixmap = newPixmap.copy(newPixmap.rect().x(), y, fMSize.width(), fMSize.height()); 
} 

format.setForeground(QBrush(newPixmap)); 
format.setTextOutline(QPen(borderColor, ui->spinBoxWidth->value())); 

ui->textEdit->clear(); 
cursor.insertText(text, format); 

. 저는 이것이이 일을 끝내고 더 나은 최선의 실천을 찾는 매우 아마추어적인 접근이라고 생각합니다. 그렇지 않다면 적어도 현재의 프로세스를 향상시킬 방법이 있다면 제안하십시오.

답변

1

QPainter는 이미지 합성을 할 수 있으며 페인트 기능 밖에서도 사용할 수 있습니다. QPainter::CompositionMode_SourceOver처럼 소스 이미지를 배경으로 사용하고 문자 이미지와 결합하면 원하는 결과를 얻을 수 있습니다.

나는 사람들에게 문서를 말하는 것을 싫어하지만 튜토리얼은 정말 좋은 example을 가지고있다. (신경 쓰지 않는 한 openGL을 무시한다.)

+0

답변 주셔서 감사합니다. LeviX. 이것은 유망한 것으로 보인다. 나는 그것에 대해 알고 있었지만 전에는 사용 해본 적이 없다. 나는 그것을 시도하고 결과를 공유 할 것이다. – zeFree

관련 문제