0

我正在使用“压缩”功能将位图对象压缩到 OutputStream。这是我的代码:

try {
                    if (bitmap != null) {
                        bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
                                bytes);
                    } else {
                        Message message = handler.obtainMessage(1, "false");
                        handler.sendMessage(message);
                        return;
                    }
                } catch (OutOfMemoryError oom) {
                    System.gc();
                    Message message=handler.obtainMessage(1,"false");
                    handler.sendMessage(message);
                    return;
                } catch (NullPointerException npe) {
                    System.gc();
                    Message message = handler.obtainMessage(1, "false");
                    handler.sendMessage(message);
                    return;
                } catch (Exception e) {
                    System.gc();
                    Message message = handler.obtainMessage(1, "false");
                    handler.sendMessage(message);
                    return;
                }

当我在 G1 和 hero 上运行此代码时,我得到了一个正确的输出流(我稍后将其保存到 sdcard 上的图像文件中)。但是,当我在 Google nexus 上测试此代码时,在将输出流转换为图像文件后,我得到了一个模糊的图像。

供参考

操作系统:安卓1.5;G1 和 Hero 使用 1.5 操作系统,nexus 使用 2.0

请帮助.. nexus 中是否存在已知问题?还是我做错了什么?

4

1 回答 1

1

检查Android 游戏开发:快速入门

来自Step Three: Carefully Design the Best Game Ever

纹理压缩的问题在于不同的显卡供应商支持不同的纹理格式。G1 和其他 MSM7k 设备支持 ATI 的 ATITC 压缩格式。Droid 支持 PowerVR 的 PVRTC 格式。Nvidia 的 Tegra2 平台支持 DXT 格式。坏消息是,这些格式不兼容。好消息是,所有 OpenGL ES 2.0 设备(包括基于 Snapdragon 的 Nexus One、基于 OMAP3 的 Droid 和 Tegra2 设备)都支持称为 ETC1 的通用格式。ETC1 不是最好的纹理格式(它缺乏对 alpha 通道的支持),它在第一代设备上不受支持,但它是最常见的支持格式(Android SDK 提供了一个压缩实用程序(参见 sdk/tools/ etc1tool)和这种格式的运行时工具)。

于 2010-06-19T14:30:25.977 回答