You are not logged in.
I'm writting a GRRLIB tutorial for a Spanish web, and I'm finishing a chapter about textures.
The example code is a "image/music" viewer, and I found a problem with jpg images.
When I load a png image I haven't found problems with the same code (only resolution diferent than x4 files are not showed, but it is known), but if the image is a jpg the file is showed once but if I try to show the same or a second diferent image the program crashes in loading function.
I'm writting a GRRLIB tutorial for a Spanish web, and I'm finishing a chapter about textures.
The example code is a "image/music" viewer, and I found a problem with jpg images.
When I load a png image I haven't found problems with the same code (only resolution x4 files are not showed, but it is known), but if the image is a jpg the file is showed once but if I try to show the same or a second diferent image the program crashes in loading function.
void leeimagen(int i){ if (tex_foto!=NULL) GRRLIB_FreeTexture(tex_foto); nombre[0]=0; strcat(nombre,DirActivo); strcat(nombre,lista[i]); tex_foto = GRRLIB_LoadTextureFromFile(nombre); GRRLIB_SetMidHandle(tex_foto,true); }
and the code in main to show the image is:
if (tipos[archivo_actual]==TIPO_IMAGEN){ if(!leido) { angulo = 0; cursoractivo = 1; leeimagen(archivo_actual); leido = true; } if (tex_foto != NULL){ GRRLIB_SetMidHandle(tex_foto, true); if ((angulo % 180) == 0){ sfx = 480.0/tex_foto->w; sfy = 365.0/tex_foto->h; } else { sfy = 480.0/tex_foto->h; sfx = 365.0/tex_foto->w; } } if (tex_foto != NULL) GRRLIB_DrawImg(320-stx,(210-sty)*sy,tex_foto,angulo,sfx*zoom,sy*sfy*zoom,GRRLIB_WHITE); else GRRLIB_DrawImg(320,210*sy,tex_error,0,1,sy*1.0,GRRLIB_WHITE); }
By other hand, is possible to show an image with resolution not multiply by 4?
Last edited by wilco2009 (2011-12-05 09:37:44)
Offline
Do not GRRLIB_FreeTexture(tex_foto); you need to keep the memory available for the next time you draw the image.
I suggest that you make tex_foto[i] an array.
Images have to be multiple of 4 or even.
Offline
Yes, I thought on that, but, LoadTextureFromFile uses LoadTextureJPGEx (through LoadTexture and LoadTextureJPG) and it reserve memory for the new texture with memalign:
my_texture->data = memalign(32, cinfo.output_width * cinfo.output_height * 4);
In my program, exactly the same code works perfectly if the image is a png.
Last edited by wilco2009 (2011-12-03 14:00:14)
Offline
hmmm, then I have no idea, I've only used pngs.
Offline
Seems it happens only with some jpeg images, but valid images.
I tried to put only two GRRLIB_LoadImageFromFile calls on main with the same jpeg image and program freeze.
Offline