2017-09-18 15 views
0

間違っています。ユーザーが描画を終了すると、テクスチャはSOILを使用してjpgに保存されます。画像が正しく表示されます。画像を反転した後に出力が正しく配置されていますが、画像が小さいサイズに拡大されます(高解像度のデバイスでは、より小さい画像が生成されます)。OpenGLは私がにiOS用の描画アプリケーションの一部として、OpenGLを使用しています

私は、次の午前プロセスは、次のとおりです。

unsigned char *pixels = (unsigned char*)malloc(4* imgwidth* imgheight); 
glBindTexture(GL_TEXTURE_2D, 0); 
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, imgwidth, imgheight); 
glPixelStorei (GL_UNPACK_ALIGNMENT, 1); 
glPixelStorei (GL_UNPACK_SKIP_ROWS, 1); 
glPixelStorei (GL_UNPACK_SKIP_PIXELS, 1); 
glReadPixels(0, 0, imgwidth, imgheight, GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid *) pixels); 
invertPixels(pixels); 
int result; 
result = SOIL_save_image_quality(imagepath, SOIL_SAVE_TYPE_JPG, d, imgheight, 4, pixel_data, 99); 
delete [] pixel; 

私は、画像のサイズが同じであるが、逆さまにそれなしで、死への反転アルゴリズムを分析し、そのは、その仕事をして確信しています。これを引き起こす原因は何ですか?私はテクスチャを再スケーリングする必要がありますか?

答えて

0

私はこれがあなたのCAEAGLLayerのcontentsScale(またはあなたのGLKViewのcontentScaleFactor)に関連していると思います。アプリケーションの値は、1.0,2.0、または3.0のいずれかである必要があります。 1.0は私たちに網膜ディスプレイの品質を低下させます。網膜のテクスチャを作成するときは、予想される結果のためにCAEAGLLayerのcontentScaleでサイズを調整する必要があります。つまり、1.0以外のサイズのテクスチャを作成する必要があるということです。私はSOILを使用していませんが、その逆が真です。したがって、あなたが期待する画像サイズを得るためには、画像を拡大縮小する必要があります。

hereを述べたように、我々は、パフォーマンスのための貿易の品質にcontentsScaleを変更することができます。私のOpenGLアプリケーションは、より良いレンダリング性能のためにiphone7 +の場合でも常にcontentScaleを2.0に設定します。ですから、iphone7が2.0、iphone7 +が3.0のようなハードコードはしないでください。

+0

ありがとうございます。あなたの記事は私が問題に近づくのに役立ちましたが、コンテンツの倍率だけを調整することは私の解決策ではありません。 contentScalingFactorを大きくすると、イメージのサイズは予想通り近くになりますが、これも中心から外れていることがわかりました。(0,0、w、h)はイメージの左下をカットしています。投稿(https://stackoverflow.com/questions/9155515/glreadpixels-only-saves-1-4-screen-size-snapshots)は、私が経験しているものよりも多いかもしれません。私はObj-CではなくC++で作業しており、SOILはフレームバッファタイプを符号なしバイトから変更するのを防ぎます。 – Randoramma

+0

簡単な質問:オリジナルコンテンツのスケーリング1.0はありましたか? – beshio

+0

いいえ、デバイスタイプに基づいてEAGLコンテキストによって自動的に設定されました。 – Randoramma

関連する問題