栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

encodeByteArray和copyPixelsToBuffer无法正常工作。SkImageDecoder :: Factory返回null

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

encodeByteArray和copyPixelsToBuffer无法正常工作。SkImageDecoder :: Factory返回null

最终,我找到了一种使其同时运行并更快的方法。使用此方法遇到两个问题:

  1. 我也应该通过Bitmap.Config参数,否则我无法解码字节数组
  2. _bmp.compress和_bmp.copyPixelsToBuffer给出了不同的数组,所以我不能使用解码字节数组。

我这样解决了

private void writeObject(ObjectOutputStream oos) throws IOException {    oos.defaultWriteObject();    if(_bmp!=null){        int bytes = _bmp.getWidth()*_bmp.getHeight()*4;        ByteBuffer buffer = ByteBuffer.allocate(bytes);        _bmp.copyPixelsToBuffer(buffer);        byte[] array = new byte[bytes]; // looks like this is extraneous memory allocation        if (buffer.hasArray()) { try{     array = buffer.array(); } catch (BufferUnderflowException e) {     e.printStackTrace(); }        }        String configName = _bmp.getConfig().name();        oos.writeObject(array);        oos.writeInt(_bmp.getWidth());        oos.writeInt(_bmp.getHeight());        oos.writeObject(configName);    } else {        oos.writeObject(null);    }}private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException{    ois.defaultReadObject();    byte[] data = (byte[]) ois.readObject();    if (data != null) {        int w = ois.readInt();        int h = ois.readInt();        String configName = (String) ois.readObject();        Bitmap.Config configBmp = Bitmap.Config.valueOf(configName);        Bitmap bitmap_tmp = Bitmap.createBitmap(w, h, configBmp);        ByteBuffer buffer = ByteBuffer.wrap(data);        bitmap_tmp.copyPixelsFromBuffer(buffer);        _bmp = bitmap_tmp.copy(configBmp,true);        bitmap_tmp.recycle();    } else {        _bmp = null;    }}

这对我来说足够快-比bmp.compress方式快15倍。希望这可以帮助 :)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/595989.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号