使用单个图像处理黑莓中的不同屏幕分辨率

时间:2011-09-24 07:00:46

标签: blackberry blackberry-simulator blackberry-eclipse-plugin

我有一个PNG图像,并将其应用于所有屏幕作为背景。它的分辨率为360x480,因为我开始为9800模拟器编程。我正在为OS 6.0开发。当我为具有屏幕分辨率480x360的9700模拟器测试我的应用程序时,图像仅覆盖屏幕的一半。我已经研究和学习了使用Fixed32和scale,我也应用了它。但背景似乎仍然存在问题。我在资源文件夹中只有一个图像。如何处理这一图像以适用于所有不同的黑莓设备

2 个答案:

答案 0 :(得分:3)

您必须根据屏幕宽度和高度调整图像大小以适合您正在运行的屏幕。

为此,将使用以下方法。

public static EncodedImage sizeImage(EncodedImage image, int width, 
              int height) {
              EncodedImage result = null;

              int currentWidthFixed32 = Fixed32.toFP(image.getWidth());
              int currentHeightFixed32 = Fixed32.toFP(image.getHeight());

              int requiredWidthFixed32 = Fixed32.toFP(width);
              int requiredHeightFixed32 = Fixed32.toFP(height);

              int scaleXFixed32 = Fixed32.div(currentWidthFixed32,
                requiredWidthFixed32);
              int scaleYFixed32 = Fixed32.div(currentHeightFixed32,
                requiredHeightFixed32);

              result = image.scaleImage32(scaleXFixed32, scaleYFixed32);
              return result;
             }

调整后使用以下方法进行裁剪。

public static Bitmap cropBitmap(Bitmap original, int width, int height) {
        Bitmap bmp = new Bitmap(width, height);

         int x = (original.getWidth() / 2) - (width / 2); // Center the new size by width
        int y = (original.getHeight() / 2) - (height / 2); // Center the new size by height
        int[] argb = new int[width * height]; 
        original.getARGB(argb, 0, width, x, y, width, height);
        bmp.setARGB(argb, 0, width, 0, 0, width, height);
        return bmp;

创建位图图像如下。

 EncodedImage  eImage = EncodedImage.getEncodedImageResource("img/new.png" );
 EncodedImage bitimage=sizeImage(eImage,Display.getWidth(),Display.getHeight());

 Bitmap image=cropBitmap(bitimage.getBitmap(),Display.getWidth(),Display.getHeight());

将上面的位图传递给您的经理。

现在将返回的位图设置为屏幕背景。它对我有用。希望这对你有所帮助。

答案 1 :(得分:0)

使用所需的宽度和高度设置图像使用位图比例;如果你想把你的图像作为背景,然后将位图图像放到VerticalFieldManager,如下所示: 适用于所有设备:

Bitmap bit=Bitmap.getBitmapResource("background.png");
Bitmap scalingBitmap=new Bitmap(Device.getWidth(),Device.getHeight());  //here you can give any size.Then it sets the image according to your required width and height;
bit.scaleInto(scalingBitmap, Bitmap.FILTER_LANCZOS);  //This is important;
VerticalFieldManager mainVertical=new VerticalFieldManager()
{
     //Here Device.getWidth() and Device.getHeight(); These two are your Blackberry Device width and height;(According your 9800 it takes 480x360)
    protected void paint(Graphics g) 
    {
        g.clear();
        g.drawBitmap(0, 0, Device.getWidth(),Device.getHeight(), scalingBitmap, 0, 0); 
        super.paint(g);
    }
    protected void sublayout(int maxWidth, int maxHeight) 
    {               
        super.sublayout(Device.getWidth(),Device.getHeight());
        setExtent(Device.getWidth(),Device.getHeight());
    }
};
add(mainVertical);

这就够了。