OpenGL使用SOIL生成jpg只有图像大小不正确

时间:2017-09-18 21:26:06

标签: ios opengl-es jpeg soil

我正在使用OpenGL作为iOS绘图应用程序的一部分。当用户完成绘制时,使用SOIL将纹理保存到jpg。图像在视图中显示正确,保存时输出方向正确(在反转图像后)但图像缩放到较小的尺寸(基于设备...更高分辨率的设备产生的图像比我预期的更小)。

我遵循的流程是:

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;

我已经将反演算法分析为死亡并且相信它能够完成它的工作,没有它,图像大小相同但是颠倒了。可能是什么导致了这个?我需要重新调整纹理吗?

1 个答案:

答案 0 :(得分:0)

我认为这与您的CAEAGLLayer(或GLKView的contentScaleFactor)的contentsScale有关。您可以检查应用程序的值,该值应为1.0,2.0或3.0。 1.0给我们视网膜显示质量差。当我们为视网膜创建纹理时,我们需要使用CAEAGLLayer的contentScale缩放尺寸以获得预期结果。我的意思是,如果不是1.0,我们需要创建更大尺寸的纹理。我没有使用SOIL,但相反应该是真的。因此,我认为,要获得您期望的图像尺寸,您需要缩放图像。

请注意here,我们可以将contentsScale更改为交易质量以提高性能。即使是iphone7 +,我的OpenGL应用程序也始终将contentScale设置为2.0,以获得更好的渲染性能。所以,不要像iphone7那样的硬编码是2.0,或者iphone7 +是3.0。