繁体   English   中英

黑莓手机中的图像浏览器

[英]Image Browser in blackberry

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

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. 读取/调整大小应在后台Thread上完成,以免阻塞主UI线程。 换句话说,在后台Thread上进行读取/调整大小时,用户应该能够滚动屏幕。 我建议安排读取/调整大小任务的队列,并在后台工作Thread上执行它们。 当在工作Thread上完成任务时,是时候使用调整大小的图像更新屏幕的UI了,然后使用UiApplication.invokeLater(Runnable action)

您可以尝试使用BufferedInputStream。 我很幸运,它可以加快我的阅读时间,也可能对你有用。

 BufferedInputStream inputStream = new BufferedInputStream(fileConnection.openInputStream());
 byte[] imageBytes = new byte[(int)fileConnection.fileSize()];
 inputStream.read(imageBytes, 0, imageBytes.length);

在以下URL上发布的人发现您可以从BBThumbs.dat获得缩略图并发布一些代码。 我自己还没有尝试过,但是如果成功的话,节省的时间将非常可观。

http://supportforums.blackberry.com/t5/Java-Development/Thumbnails-work-around/td-p/343870

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM