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

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

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倍。希望这可以帮助 :)



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5587179.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-14
下一篇2022-12-14

发表评论

登录后才能评论

评论列表(0条)

    保存