Ios OpenGL使用SOIL生成jpg时,仅图像大小不正确

Ios OpenGL使用SOIL生成jpg时,仅图像大小不正确,ios,opengl-es,jpeg,soil,Ios,Opengl Es,Jpeg,Soil,我正在使用OpenGL作为iOS绘图应用程序的一部分。用户完成绘制后,纹理将使用SOIL保存到jpg。图像在视图中显示正确,保存时输出方向正确(反转图像后),但图像缩放到比预期更小的尺寸(基于设备)。分辨率更高的设备会生成更小的图像 我遵循的过程是: unsigned char *pixels = (unsigned char*)malloc( 4* imgwidth* imgheight); glBindTexture(GL_TEXTURE_2D, 0); glCopyTexSubImage2

我正在使用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;

我对反演算法进行了深入的分析,我相信它能完成它的工作,没有它,图像的大小是一样的,但却是颠倒的。这可能是什么原因造成的?我需要重新缩放纹理吗

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


注:如上所述,我们可以将ContentsCale更改为以质量换取性能。我的OpenGL应用程序始终将contentScale设置为2.0,即使对于iphone7+也是如此,以提高渲染性能。所以,不要硬编码像iphone7是2.0或iphone7+是3.0。

谢谢你的建议。你的帖子帮助我更接近这个问题,但是仅仅调整内容的比例系数并不是我的解决方案。通过增加contentScalingFactor,图像大小更接近预期,但现在我确定它也偏离中心,(0,0,w,h)正在切断图像的底部和左侧。帖子()可能更符合我的感受。我在C++中工作,而不是Obj-C,并且Stand防止了帧缓冲类型从无符号字节中改变。快速问题:你的原始内容缩放1吗?不,它是由EGLVIEW基于设备类型自动设置的。