在NetBeans中管理J2ME的图像资产的正确方法是什么

时间:2011-10-25 10:01:41

标签: netbeans java-me

我正在使用NetBeans开发运行在许多不同设备上的J2ME应用程序。该应用程序使用了许多不同的图像资产。由于设备具有不同的屏幕大小,这意味着我需要编译多个二进制文件,每个二进制文件具有不同的资产大小。

到目前为止,我一直在使用手动流程来控制资产。我有一个由一堆子目录组成的目录,每个子目录对应于特定类设备所需的资产。例如,我有一个目录“320_240”,其资产大小为320x240屏幕,另一个“480_360”,资产大小为480x360屏幕。文件名与加载它们的代码完全相同。在编译之前,我只是将正确的文件复制到默认包中(在src下)。

这显然可以改善。我已经有不同的项目配置代表不同的屏幕尺寸,所以我也想让资产自动切换。作为NetBeans的相对新手,我不确定最好的方法是什么。

FWIW,这是我提出的最好的:

  1. 创建资产。 src下的包,其中LABEL对应于设备类(例如“320_240”,“480_360”)
  2. 将每个班级的图像放入正确的src / asset /目录
  3. 创建一个静态最终String assetdir,根据当前选择的项目配置设置为“/ asset //”
  4. 使用Image.creatImage(assetDir +“image.png”)
  5. 加载图像
  6. 对于每个配置,只在Project-> Build-> Sources Filtering中包含必要的资产目录(我认为这是为了避免在编译的应用程序中存储未使用的图像,这是正确的吗?)
  7. 但是,这仍然感觉有点过分。这必须是一个常见问题。有没有人有更好的解决方案?

    谢谢!

1 个答案:

答案 0 :(得分:1)

如果您使用大量图像,那么jar文件的大小将会增加。您无法在某些低端设备中安装该jar。

只需使用一张图片,然后根据屏幕宽度和屏幕高度调整图像大小。

要调整图像大小,请使用以下方法。

public Image resizeImage(Image src, int screenHeight, int screenWidth) {
        int srcWidth = src.getWidth();

        int srcHeight = src.getHeight();
        Image tmp = Image.createImage(screenWidth, srcHeight);
        Graphics g = tmp.getGraphics();
        int ratio = (srcWidth << 16) / screenWidth;
        int pos = ratio / 2;

        //Horizontal Resize        

        for (int index = 0; index < screenWidth; index++) {
            g.setClip(index, 0, 1, srcHeight);
            g.drawImage(src, index - (pos >> 16), 0);
            pos += ratio;
        }

        Image resizedImage = Image.createImage(screenWidth, screenHeight);
        g = resizedImage.getGraphics();
        ratio = (srcHeight << 16) / screenHeight;
        pos = ratio / 2;

        //Vertical resize

        for (int index = 0; index < screenHeight; index++) {
            g.setClip(0, index, screenWidth, 1);
            g.drawImage(tmp, 0, index - (pos >> 16));
            pos += ratio;
        }
        return resizedImage;

    }