2010年12月31日 星期五

利用Qt轉出bitmap點陣字

一般轉點陣字都是用win api
不過我來寫一個Qt的方式
觀念是一樣的
先將字畫出來,在擷取下來,轉成點陣圖
所以我的作法是
將字畫在QLabel上(注意,要將反鋸齒關掉)
在擷取成QPixmap
最後在轉成bitmap
void Widget::rasters()
{
    if(ui->lineEdit->text().isEmpty()){
        ui->textEdit->setText(ui->lineEdit->text());
        return;
    }
    QLabel label(ui->lineEdit->text());
    QFont font(ui->fontComboBox->currentText());
    font.setStyleStrategy(QFont::NoAntialias);
    font.setPixelSize(ui->comboBox->currentText().toInt());
    label.setFont(font);
    label.adjustSize();
    QPixmap pixmap = QPixmap::grabWidget(&label);
    QImage image = pixmap.toImage();
    QString text;
    for(int i=0; i<pixmap.height(); i++){
        for(int j=0; j<pixmap.width(); j++){
            QRgb rgb = image.pixel(j,i);
            if(128 > qGray(rgb)){
                text.append(QString::fromUtf8("■"));
            }else{
                text.append(QString::fromUtf8("□"));
            }
        }
        text.append("\n");
    }
    ui->textEdit->setText(text);
}

沒有留言: