【问题标题】:call to Bitmap.compress does not return - and NO exception调用 Bitmap.compress 不会返回 - 并且没有异常
【发布时间】:2014-06-27 04:01:31
【问题描述】:

在 Android 上,我有时会对图像执行以下操作。

它永远不会超过 bitmapPicture.compress 行 - 它似乎只是坐在那里挂起。

上面我得到字节数的行返回 40000。

我从来没有看到压缩完成,或者“压缩”之后的任何其他输出。

try {

    final int COMPRESSION_QUALITY = 100;
    String encodedImage;
    ByteArrayOutputStream byteArrayBitmapStream = new ByteArrayOutputStream();
    Log.e("Error","compress" + bitmapPicture.getByteCount());

    bitmapPicture.compress(Bitmap.CompressFormat.PNG,
                    COMPRESSION_QUALITY, byteArrayBitmapStream);
    Log.e("Error","compress done");
    byte[] b = byteArrayBitmapStream.toByteArray();
    Log.e("Error","bytear");
    encodedImage = Base64.encodeToString(b, Base64.DEFAULT);

    Log.e("Error","JSONDATA encodedImage Returned");
    return encodedImage;

} catch (Exception e) {

    ErrorLogger.AddError(e.getMessage(), 199);
    Log.e("Error","JSONDATA Error"+e.getMessage());
    return null;
}

【问题讨论】:

  • 我看到了同样的事情。你有没有找到解决办法?
  • 不幸的是我没有,我创建了一个线程和一个看门狗类,如果它花费的时间比预期的要长,我会杀死线程并报告错误。不优雅,但无法继续处理它
  • 添加了一个赏金 - 看看我们能不能弄明白...
  • 你的 ByteArrayOutputStream 是空的,它如何返回任何图像?首先将图像流分配给它,然后将它传递给它进行压缩。
  • @jitainsharma - Bitmap.compress 预计将在返回时用字节填充 ByteArrayOutputStream。

标签: java android bitmap


【解决方案1】:

尝试调用

bitmapPicture.setConfig(Bitmap.Config.ARGB_8888);

压缩前。否则,你能提供更多吗?我们可以看到您声明/加载位图的位置吗?

【讨论】:

  • 不起作用 private static Bitmap ARGBBitmap(Bitmap img) { return img.copy(Bitmap.Config.ARGB_8888,true); } 公共静态字符串 getStringFromBitmaNET(Bitmap bitmapPicture) { final int COMPRESSION_QUALITY = 100;字符串编码图像; bitmapPicture = ARGBBitmap(bitmapPicture); ByteArrayOutputStream byteArrayBitmapStream = new ByteArrayOutputStream(); bitmapPicture.compress(Bitmap.CompressFormat.PNG, COMPRESSION_QUALITY, byteArrayBitmapStream); byte[] b = byteArrayBitmapStream.toByteArray();编码图像 = Base64.encodeToString(b, Base64.DEFAULT);返回编码图像; }
【解决方案2】:

尝试使用此代码:

Bitmap decoded = BitmapFactory.decodeStream(new ByteArrayInputStream(b.toByteArray()));
Log.e("Compressed dimensions", decoded.getWidth()+" "+decoded.getHeight());

【讨论】:

    猜你喜欢
    • 2019-04-26
    • 2012-08-19
    • 2021-10-25
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 2022-06-30
    • 2012-10-06
    • 1970-01-01
    相关资源
    最近更新 更多