2017-04-25 7 views
0

QTの新規ユーザーです。 1つの文字または文字列を配列に変換することは可能ですか?0は白いフィールドを意味し、1は黒いフィールドを意味しますか?私は、文字「」QStringのフォントのいずれかの表現として保存され、私は、配列を次取得したい持っている場合たとえば:QTのテキストをピクセル配列に変換する方法

int array[9][6] = {    //"a" char array 
     {0, 0, 0, 0, 0, 0},   //- - - - - - 
     {0, 1, 1, 1, 1, 0},   //- * * * * - 
     {1, 0, 0, 0, 0, 1},   //* - - - - * 
     {0, 0, 0, 0, 0, 1},   //- - - - - * 
     {0, 1, 1, 1, 1, 1},   //- * * * * * 
     {1, 0, 0, 0, 0, 1},   //* - - - - * 
     {1, 0, 0, 0, 1, 1},   //* - - - * * 
     {0, 1, 1, 1, 0, 1},   //- * * * - * 
     {0, 0, 0, 0, 0, 0},   //- - - - - - 
}; 

をその目標を達成するためのQTのいずれかの方法はありますか?私は私の問題を可能な限り明確に記述し、誰かが私にこれを手伝ってくれることを願っていますか?

非常に重要なことに、サイズ配列は選択したフォントサイズに依存する必要があります。たとえば、30 ptフォントを選択した場合、配列は10 ptフォントよりも大きくなければなりません。

ありがとうございます。 よろしくお願いいたします。

+0

あなたは何をすべきかピクセル配列の意味ですか? – eyllanesc

+0

名前の付け方はわかりませんが、 "ピクセル配列"というのは、私の投稿に上の例として示されているこの配列を意味します。 – drewpol

答えて

1

私は私の最初のリードスルー...よく、ここで

enter image description here

#include <QApplication> 
#include <QPixmap> 
#include <QLabel> 
#include <QPainter> 
#include <QDebug> 
#include <QVector> 
#include <QFontMetrics> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 

    QSize size; 
// QPixmap pixmap(100,100); 
    QImage image(20,20, QImage::Format_Mono);// Change the width and height here as needed if your letters get too big 
    image.fill(0); 
    { 
     QPainter painter(&image); 
     //// alternative to fill method 
     // painter.setBrush(Qt::black); 
     // painter.drawRect(0,0,image.width(), image.height()); 
     painter.setPen(Qt::white); 

     QFontMetrics fm(painter.font()); 
     size.setHeight(fm.height()); 
     size.setWidth(fm.width('a')); 

     painter.drawText(0,fm.height(),"a"); 
    } 
    QLabel label; 
    label.setPixmap(QPixmap::fromImage(image).scaled(400,400, Qt::KeepAspectRatio)); 
    label.show(); 

    QVector <QVector <int> > array(size.height(), QVector < int> (size.width(), 0)); 

    for(int r = 0; r < size.height(); r++) 
     for(int c = 0; c < size.width(); c++) 
      array[r][c] = (image.pixelColor(c,r) == Qt::white ? 1 : 0); 

// qDebug() << size << array; 
    foreach(QVector <int> row, array) 
     qDebug() << row; 

    return a.exec(); 
} 

...を求めたものである出力に質問を誤解:

QVector(0, 0, 0, 0, 0, 0) 
QVector(0, 0, 0, 0, 0, 0) 
QVector(0, 0, 0, 0, 0, 0) 
QVector(0, 0, 0, 0, 0, 0) 
QVector(0, 0, 0, 0, 0, 0) 
QVector(0, 0, 0, 0, 0, 0) 
QVector(0, 0, 0, 0, 0, 0) 
QVector(0, 1, 1, 1, 0, 0) 
QVector(0, 0, 0, 0, 1, 0) 
QVector(0, 1, 1, 1, 1, 0) 
QVector(1, 0, 0, 0, 1, 0) 
QVector(1, 0, 0, 0, 1, 0) 
QVector(0, 1, 1, 1, 1, 0) 
+0

ありがとうございました。それが本当に必要なのです!あなたのコードからたくさんのことを学びました。ありがとう! – drewpol

2

ビットマップイメージにテキストを描画すると、テキストを含むビットマップが得られます。すべての目的と目的のために、ピクセル配列です。

「ビットマップフォント」も使用する必要があることに注意してください。通常のフォントは、ほとんどがアンチエイリアス処理を利用するために作成されたものであり、鮮明で読みやすいビットマップイメージにはなりません。

Qtには、フォントメトリックも用意されています。これにより、大きな文字や個々の文字の大きさを明確にすることができます。

関連する問題