How to Fit an Image to the Screen Size
Article Metadata
If we want to use an image as background in a J2ME application, we have the problem that we must to have one image for each different size screen. Another approach is to have only one image and fit it to all screen sizes.
In this article I will describe an algorithm to do that.
Method Specification
| Method Name | CreateScaledImage |
| Parameters | |
| imgOldImage | Image that we have to fit |
| iNewWidth | The new witdth of the image |
| iNewHeight | The new height of the image |
| Return Value | |
| New image with the new size | |
Source file
public static Image CreateScaledImage( Image imgOldImage, int iNewWidth, int iNewHeight )
{
Image imgNewImage = null;
final int iOldWidth = imgOldImage.getWidth();
final int iOldHeight = imgOldImage.getHeight();
int iOldRGBArray[] = new int[iOldWidth * iOldHeight];
iOldRGBArray = imgOldImage.getRGB( iOldRGBArray, 0, iOldWidth, 0, 0, iOldWidth, iOldHeight);
int iNewRGBArray[] = new int[iNewWidth * iNewHeight];
for (int yy = 0; yy < iNewHeight; yy++)
{
int dy = yy * iOldHeight / iNewHeight;
for (int xx = 0; xx < iNewWidth; xx++)
{
int dx = xx * iOldWidth / iNewWidth;
iNewRGBArray[(iNewWidth * yy) + xx] = iOldRGBArray[(iOldWidth * dy) + dx];
}
}
imgNewImage = Image.createRGBImage(iNewRGBArray, iNewWidth, iNewHeight, true);
return imgNewImage;
}
Example
We could use this method in a Canvas Object in this way:
public class MyCanvas extends GameCanvas
{
private Image objBKGImage = null;
public void paint(Graphics g)
{
iViewH = this.getHeight();
iViewW = this.getWidth();
// load the background image
if (objBKGImage== null)
{
try
{
objBKGImage = Image.createImage("/res/Logo_150_53.png");
objBKGImage = CreateScaledImage(objBKGImage, iViewW, iViewH)
} catch (IOException ex)
{
ex.printStackTrace();
}
}
// draw background
if (objBKGImage!= null)
g.drawImage(objBKGImage,
(int)iViewW / 2,
(int)iViewH / 2,
Graphics.VCENTER | Graphics.HCENTER );
}
}
microedition 19:39, 28 August 2008 (EEST) -- http://microedition.biz


15 Sep
2009
This article discusses a common problem in Java ME, that of resizing images to fit different screen resolutions. The article demonstrates how to resize an image to be used as a background image for a Canvas. The default drawImage() method provided by the Graphics class does not allow the programmer to set width and height properties (as is possible in Java Standard Edition applications). The article demonstrates how to get around this by using the getRGB() method of the Image class. This allows access to the individual pixels (RGB = red, green blue) of the image. These are then stretched or compressed to create an image according to the dimensions of the screen in question. In this way, programmers can adjust for different screen sizes.
A couple of drawbacks should, however, be noted. Image resizing is processing intensive, and the performance of the code provided depends on the resolution of the original image. Furthermore, if the aspect ratio (width/height) of the screen in question does not match the original image, the result can look rather stretched or squashed. The use of images as backgrounds should also be avoided on devices where the phone can switch from portrait to landscape mode.