0

各呼び出しで RGB フレームをファイルに追加する必要があります。

これが私がすることです:

        size_t lenght=_viewWidth * _viewHeight * 3;
    BYTE *bytes=(BYTE*)malloc(lenght);
    ///////////////  read pixels from  OpenGL tex  /////////////////////
    glBindTexture(GL_TEXTURE_2D,tex);
    glGetTexImage(GL_TEXTURE_2D,0,GL_BGR,GL_UNSIGNED_BYTE,bytes);
    glBindTexture(GL_TEXTURE_2D,0);

        ///write it to file :
         hOutFile = fopen( outFileName.c_str(), cfg.appendMode ? "ab" : "wb" );
    assert(hOutFile!=0);


    fwrite(bytes, 1 ,w * h, hOutFile); // Write 



    fclose(hOutFile);

fwrite を呼び出すと、なぜかアクセス違反が発生します。おそらく、使い方を誤解しています。

4

3 に答える 3

1

とをどのように決定_viewWidth_viewHeightますか? テクスチャを読み戻すときは、 GL_TEXTURE_2DターゲットからGL_TEXTURE_WIDTHおよびGL_TEXTURE_HEIGHTパラメータを取得するためにglGetTexLevelparameteriでそれらを取得する必要があります。

ラインも

fwrite(bytes, 1 ,w * h, hOutFile);

間違っている。は何ですかw、何hですか?それらはコード内で初期化されることはなく、そこにある他の割り当てには接続されません。また、それらが画像の幅と高さである場合でも、ピクセルの要素数が不足しています。3の可能性が高い。

次のようなものがある方が理にかなっています

int elements = ...; // probably 3
int w = ...;
int h = ...;
size_t bytes_length = w*elements * h;
bytes = malloc(bytes_length)

... 

fwrite(bytes, w*elements, h, hOutFile);
于 2013-03-17T14:59:28.443 に答える
0

原因bytesですか?多分w * hそれはあなたが思っているものではありません。

于 2013-03-17T14:56:02.467 に答える
0

幅は奇数ですか、それとも 4 で割り切れませんか?

デフォルトでは、OpenGL は、ピクセル データの行が 4 バイト境界に位置合わせされていると想定しています。RGB/BGR では、これは常に当てはまるとは限りません。入れてみて

glPixelStorei(GL_PACK_ALIGNMENT, 1)

ピクセルを読み取る前に、問題が解決するかどうかを確認してください。

于 2013-03-18T01:19:15.070 に答える