J'utilise OpenGL pour faire partie d'une application de dessin pour iOS. Lorsque l'utilisateur a fini de dessiner, la texture est enregistrée dans un jpg en utilisant SOIL. L'image apparaît correcte dans la vue, lorsqu'elle est enregistrée, la sortie est orientée correctement (après avoir inversé l'image) mais l'image est réduite à une taille plus petite (basée sur l'appareil .. les appareils haute résolution produisent des images plus petites) que ce que j'attends.OpenGL utilisant SOIL pour produire jpg seule la taille de l'image est incorrecte
Le processus Je suivais est:
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;
J'ai analysé l'algorithme d'inversion à mort et je suis confiant son fait son travail, sans que l'image est la même taille, mais à l'envers. Qu'est-ce qui peut causer cela? Ai-je besoin de redimensionner ma texture?
Nous vous remercions de votre suggestion. Votre message m'a aidé à me rapprocher du problème, mais ajuster le facteur de mise à l'échelle du contenu n'est pas la solution pour moi. En augmentant le contentScalingFactor, la taille de l'image est plus proche que prévu, mais maintenant j'ai déterminé qu'il est également décentré, (0,0, w, h) coupe le bas et la gauche de l'image. Le message (https://stackoverflow.com/questions/9155515/glreadpixels-only-saves-1-4-screen-size-snapshots) peut être plus ce que je vis. Je travaille en C++ et non Obj-C et SOIL empêche de changer le type de tampon de trame à partir d'un octet non signé. – Randoramma
Question rapide: Votre contenu d'origine était-il à l'échelle 1.0? – beshio
Non, il a été défini automatiquement par EAGLcontext en fonction du type de périphérique. – Randoramma