从相机胶卷中选择的图像显示为黑屏

时间:2016-08-02 11:37:35

标签: codenameone

这个问题似乎刚刚在最后一天开始。

我有代码打开图库,存储图像并显示它。如果图像太大(似乎超过130000字节),它只显示黑屏。这是我的代码:

String path = (String) ev.getSource();
InputStream stream = FileSystemStorage.getInstance().openInputStream(path);

OutputStream out = FileSystemStorage.getInstance().openOutputStream(FileSystemStorage.getInstance().getAppHomePath() + movePath);
Util.copy(stream, out);

Image image = Image.createImage(path);
ScaleImageLabel fillLabel = new ScaleImageLabel(image);
fillLabel.setBackgroundType(Style.BACKGROUND_IMAGE_SCALED_FILL);
imageVideoContainer.add(BorderLayout.CENTER, fillLabel);

就像我说的那样,我确信这是在几天前我建造的时候才有效的。 3.5中有什么变化可能会影响这个吗?似乎只在iOS上发生。 感谢。

1 个答案:

答案 0 :(得分:0)

如果这是其他任何时间点,我需要调查。但是,由于我们刚刚退出3.5的代码冻结,因此我们自2016年7月27日至8月5日(即将到来的星期五)本周没有完成服务器更新。

所以我怀疑这是我们处理图像的方式的改变。

有几件事可能是这样的原因:

  1. 操作系统更新破坏了一些东西。

  2. 由于复制方面的细微变化,这种情况总是被打破但很难注意到。

  3. 我们做了一个更改,最后一次良好的构建已经超过一周了。

  4. 我无法判断它是否1,所以让我们检查3和2.对于3,让我们看看提交历史: https://github.com/codenameone/CodenameOne/commits/master

    请注意,今天(2016年8月3日)提交的更改尚未在构建服务器中...

    通过代码查看唯一看起来适度怀疑的是getRGB更改,但是从您拨打的电话中找不到该代码。请注意,您通常可以使用versioned build并针对3.4进行构建,以验证这不是我们代码中的回归,但我不确定3.4中是否存在ScaledImageLabel

    所以,让我们假设这是2,之前有些东西被打破了。由于您从相机胶卷中抓取图片,因此可能会有非常高分辨率的图像。为了证明这是一个问题,试试这个:

    ScaleImageLabel fillLabel = new ScaleImageLabel(image.scaledWidth(300));
    

    假设这可能意味着图像大小(宽度/高度)超过设备上的GPU限制。这可以通过稍微小一点的图像来解决,例如而不是复制图像,您可以使用ImageIO.save预先缩放所述图像。

相关问题