2011-07-06 22 views
3

私はウィンドウシステムでGLUTを使用して画像を出力しています。 イメージをファイルに出力したいと思います。これは課題でした。いくつかのウィンドウ解像度(256x256、1024x1024、1920x1200など)では、glReadPixelsは画面とまったく同じ画像ファイルを生成します。しかし、私は、ウィンドウのサイズを変更(例:/ 655x652、529x566、画面キャプチャを行う際に、画像がzaggedされ、ピクセルが直線的にシフトしているように思えるglReadPixelsを使用したスクリーンキャプチャでは、一部のウィンドウ解像度でピクセルがシフトします。

任意の助けが理解されるであろう

はEDIT - 。!私はいくつかのコードを追加していglReadPixelsに至るまでを呼び出す

glGetIntegerv(GL_VIEWPORT, dimensions); 
width = dimensions[2]; 
height = dimensions[3]; 
screencapture = (unsigned char*)malloc(width*height*sizeof(unsigned char)); 
glReadPixels(0,0,width, height, GL_GREEN, GL_UNSIGNED_BYTE, screencapture); 

EDIT2 - 。。私はいくつかの時間が良好な画像を生成行うマウスでウィンドウをリサイズ言及するのを忘れてしまった私は、私はちょうど右の解像度を取得するときにそれが起こると思い

+3

あなたが演奏されていませんでしたと仮定すると、 'glPixelStore'(例えば' GL_PACK_ALIGNMENT')これは(とにかく私の作品、)だけで正常に動作する必要があります。説明は、ピクセルデータを保存するときに間違った幅を取っているように思えます。たぶん、いくつかのコードが役立つかもしれません(何が間違っているかを伝えるのは難しく、正確に何をしているか分からない)。 – Damon

+0

こんにちはデーモン、助けてくれてありがとう。私はいくつかのコードを追加しました。そして、あなたは正しいです、私はGL_PACK_ALIGNMENTで遊んでいません。 – b1gtuna

+1

そこに行きます。緑色のチャンネルのみを読んでいる、つまりあなたは__bytes__を読んでいます。 GL_PACK_ALIGNMENTは[初期値は4](http://www.opengl.org/sdk/docs/man3/xhtml/glGet.xml)です(ほとんどの人が32ビット値を読み込むため、合理的なデフォルトです)。つまり、4の倍数ではない行では、行末に余分なバイト数があることを意味します(これらの値を考慮しないと、次の行がオフセットされます)。あなたは1つのチャンネルだけを読んでいるということは、機密扱いか、意図的なのでしょうか? – Damon

答えて

3

。 yへの解私たちの問題は、4行の倍数ではない各行の最後の余分なバイトを考慮に入れるか、GL_PACK_ALIGNMENTを1に変更することです(glPixelStoreを使用)。

(私の上記のコメントを参照してください)

+0

AWESOME!困難な旅の4時間は栄光に終わります:D。 Thx Damon。 – b1gtuna

関連する問題