java - 黑莓中的图像浏览器

标签 java blackberry java-me

我想为我的应用程序制作一个图像浏览器,用户可以在其中从手机中选择他想要的图像。我正在从手机中读取每张图像,如下所示:

FileConnection fileConnection = (FileConnection)Connector.open((String) imm.elementAt(i));
InputStream inputStream = fileConnection.openInputStream();
byte[] imageBytes = new byte[(int)fileConnection.fileSize()];
inputStream.read(imageBytes);
inputStream.close();
fileConnection.close();

EncodedImage image = EncodedImage.createEncodedImage(imageBytes, 0, -1);
EncodedImage image1 = scaleImageEncoded.scaleImage(image, (int) (Display.getWidth() / 4) - 10, (int) (Display.getWidth() / 4) - 10);
BrowseBitmapField field = (BrowseBitmapField) manager.getField(i);
field.setBitmap(image1.getBitmap());
field.setEncodedImage(image);

当手机包含很多图像时,这个过程会变得太慢,并且手机需要很多时间来获取它们。有没有更快的方法从手机内存中读取图像并显示它?

提前致谢

最佳答案

除了 jprofitt 建议之外,我建议执行以下操作:

  1. 当您创建图像的调整大小版本时,您可以保存它以供将来使用。下次用户单击同一图像时,您首先检查是否存在调整大小的图像,如果不存在,则读取/调整原始图像的大小。因此,您可以节省将来调整大小所花费的时间 + 不要忘记调整大小后的图像文件大小比原始文件小几倍,因此将来的读取速度会更快。

  2. 不要尝试一次读取目录中的所有图像/调整其大小。仅对当前用户可见的内容执行此操作。例如,如果目录有 100 个图像,您很可能需要大量时间来读取/调整大小/附加以管理所有图像。然而,用户一次只能在屏幕上看到 6 或 8 个图像。如果用户向上/向下滚动,那么现在应该请求读取/调整大小等那些现在应该可见但尚未读取/调整大小的图像。

  3. 读取/调整大小应在后台线程上完成,以免阻塞主 UI 线程。换句话说,用户应该能够在后台线程上读取/调整大小时滚动屏幕。我建议安排一个读取/调整大小任务的队列,并在后台工作线程上执行它们。当工作 Thread 上的任务完成并且需要使用调整大小的图像更新屏幕 UI 时,请使用 UiApplication.invokeLater(Runnable action) 来执行此操作。

关于java - 黑莓中的图像浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7284567/

相关文章:

blackberry - 减少 BlackBerry 应用程序生成的类文件数量

android - 是否有任何移动模拟器可以在网站上显示演示?

java - 检查用户是否通过密码验证或使用某些提供商

java - 我应该在哪里放置牙套?

java - 套接字复位是什么原因

eclipse - CreateProcess error=87,参数不正确

Blackberry dev - 关于 jre 1.5 的问题

java-me - 有没有办法为支持 Java ME 的设备开发新的 JSR?

java - 获取 java.net.SocketException : recvfrom failed: ECONNRESET (Connection reset by peer)

blackberry - RIM编译器支持的预处理器指令