Show an image of any size

Started by
3 comments, last by JohnnyCode 9 years, 10 months ago

I want to know if it's possible to simply display an image fullscreen. For example, I have two images. One has the size 1900x500 and the other 2440x940.

I'm developing for mobile devices, so those resolutions are way to big compared to the resolutions most phones have right now. So that's why I'd like to "resize" those images so they entirely fit on the screen, keeping its aspect ratio.

But I have no idea how to do this. All I can find is how to convert an image to a texture and display that on two triangles. But I assume that it should be possible to simply display an image on the screen without the need of a 3d object

If so, then how can I do this?

Advertisement

What platform are you using?

Showing the image using a 3D object is a perfectly acceptable solution. In fact, this would give you hardware acceleration making the interface more responsive and probably use less battery.

Could you post some code of what you have so far?

My current game project Platform RPG

I'm developing for Android right now. Currently I use a cube to render a bitmap as texture onto it. The image is quite small, 800x400 and that works fine. Then I tried it with a large image (2400x1630) and for some reason it didn't show. (I'll try to find out later why).

But the actual problem is that the texture is mapped over the entire cube. I'd like to map it in such a way that the image keeps its aspect ratio.

These are my position data for the cube and the texture:

final float[] cubePositionData = {
// Front face
-1.0f, 1.0f, 1.0f, 
-1.0f, -1.0f, 1.0f, 
1.0f, 1.0f, 1.0f, 
-1.0f, -1.0f, 1.0f, 
1.0f, -1.0f, 1.0f, 
1.0f, 1.0f, 1.0f };
 

final float[] cubeTextureCoordinateData = {
// Front face
0.0f, 0.0f, 0.0f,
1.0f, 1.0f, 0.0f,
0.0f, 1.0f, 1.0f,
1.0f, 1.0f, 0.0f };

Verify that the device supports textures of that size.

GLint iTemp = 128;
::glGetIntegerv( GL_MAX_TEXTURE_SIZE, &iTemp );
If not, you don’t have the option of using it as a texture unless you resize it.
There are free open-source libraries that can resize images for you, or you can write a very basic one that resamples down in increments of 50% using a very simple box filter.


L. Spiro

I restore Nintendo 64 video-game OST’s into HD! https://www.youtube.com/channel/UCCtX_wedtZ5BoyQBXEhnVZw/playlists?view=1&sort=lad&flow=grid

cube is not a quad.

In case you want to scale down the image, you would better use mipmaps as displaying 2400x1800 image on a 800x600 pixels is quite performance hard without mipmaps. But for that you would have to have the image to be of power of 2 dimensions. So In case you cannot achivee that, use min filter of nearest filtering (in case image does not move) and do not build mipmaps.

For keeping the ratio aspect of image, just perform width/height value , or height/width value, depending on which is lesser than one, and then multiply x component of position coordinates you have builded in snippet (or y component).

This topic is closed to new replies.

Advertisement