2009-07-10 13 views
0

いくつかのQtメンバ関数を通して/ dev/fb0(linuxフレームバッファ)ファイルにストリームを保持しようとしています。目標は、これは理想的にフレームバッファを開き、画面に書き込まれるデータのためのメモリバッファとして動作するように新しいQImageのを作成しフレームバッファfstreamからのストリームをメンバ関数を通して開く

bool myscreen::connect() 
{ 
std::fstream myscreen_Fb; 
myscreen_Fb.open("/dev/fb0") 
QImage* image; 
image = new QImage(w, h, QImage::Format_RGB888); 
QScreen::data = image->bits(); 
} 

を開く機能を接続::マイスクリーンを使用することです。私の "画像"は、bits()関数を通して画面上の最初の可視ピクセル(メモリ)を指し示します。私はハードウェアがデフォルトのメモリマッピングをサポートしていないので、これを実装する必要があります。私は、その後でそれを画面にブリットたい

void myscreen::blit(const QImage &img, const QPoint &topLeft, const QRegion &region) 
{ 

QScreen::blit(img, topLeft, region); 
write(myscreen_Fb, image.bits(), image.size()); 
} 

私はmyscreen_FbについてGCCから苦情がで宣言されていない使用して開いて最初に表示されるピクセルへのポインタを取得し得るように見えるカント範囲。何か案は?

更新

私が提案した変更を行い、クラス内の関数を宣言したが、狂気私を運転している、このエラーが発生します。

error: expected constructor, destructor, or type conversion before '.' token 

それが含まれている行を参照:

vopuscreenFd.open("/dev/fb0", fstream::out); 

ブライス

答えて

1

これは、実際にはmyscreen_Fbがblit関数のスコープ内で宣言されていないためです。ここではconnect()関数で宣言しました。

myscreen_Fbをmyscreenクラスのメンバ変数として宣言します。そのクラスのインスタンス内のすべての関数からアクセス可能になります。

この質問に関連して
class myscreen 
{ 
    public: 
    myscreen(void); 
    ~myscreen(void); 

    bool 
    connect (void); 

    void 
    blit  (const QImage &img, 
       const QPoint &topLeft, 
       const QRegion &region) 

    private: 
    std::fstream myscreen_Fb; 
}; 

:あなたがここに正確に何を意味するか、「私が使用して開いて最初に表示されるピクセルへのポインタを取得するように見えるカント」?私が推測できるのは、まだまた、メンバ変数されていない、あなたは、接続内で作成ptrをイメージを使用してブリットを使用することを意味するということですので、おそらくあなたはこれを行うにしたい:マイスクリーン内

bool myscreen::connect() 
{ 
    std::fstream myscreen_Fb; 
    myscreen_Fb.open("/dev/fb0") 
    QImage* image; 
    image = new QImage(w, h, QImage::Format_RGB888); 
    //QScreen::data = image->bits(); //don't need this? 
    blit(image, "topleft ref", "region ref");  //add this, replacing 
                // "topleft ref" and 
                // "region ref" with correct 
                // values you've pulled 
} 

と書き込み機能を:: blitは最初のピクセルにptrを取得します。私は質問が少し不明であるので、ここで多くの仮定をしています。

+1

ありがとう!私はそれを見て、何ができるか見る。 blit操作に関しては、スクリーンに変更があるたびにそれを行う必要があるので、connectは1秒間に数回実行されることはないので、connect関数にはあまり適していません!希望があれば、それに応じて更新します。 – bryce

5

あなただけの "接続" 機能の範囲でmyscreen_Fbを宣言しました。 myscreenクラスのメンバにするか、blit関数の引数として渡すだけです。

+0

私は結局それに気づいた。私はファイルを開いて、クラス内の最初のフレームバッファアドレスへのポインタを設定しようとしていますが、私は信じているが、完全にはわからないメンバ関数ではありません。 – bryce

関連する問題