Bitmap bmp   = intent.getExtras().get("data");
  int size     = bmp.getRowBytes() * bmp.getHeight();
  ByteBuffer b = ByteBuffer.allocate(size);

  bmp.copyPixelsToBuffer(b);

  byte[] bytes = new byte[size];

  try {
     b.get(bytes, 0, bytes.length);
  } catch (BufferUnderflowException e) {
     // always happens
  }
  // do something with byte[]

当我在调用copyPixelsToBuffer后查看缓冲区时,字节都是0...从相机返回的位图是不可变的...但这不重要,因为它正在复制.

这个代码有什么问题?

推荐答案

试试这样:

Bitmap bmp = intent.getExtras().get("data");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
bmp.recycle();

Java相关问答推荐

如何在Inspaut中获取当前路径的 * 模式 *?

验证使用GCP生成的非对称密钥时签名不起作用

如何让TaskView总是添加特定的列来进行排序?

那么比较似乎不是词典学的,尽管doctor 这么说

Java字符串常数池困惑

Cosmos Change Feed Process Lag远远超过收集中的记录数量

如何调用Firebase Realtime Database中的子图像列表到android studio中的回收器视图?

Java Swing:初始化身份验证类后未检测到ATM_Interface键事件

SpringBootreact 式Web应用程序的Spring Cloud Configer服务器中的资源控制器损坏

Java编译器抛出可能未正确初始化的错误?

无法了解Java线程所消耗的时间

为什么我的回收视图会显示重复的列表?

垃圾回收器是否真的删除超出作用域的对象?

Cordova Android Gradle内部版本组件不兼容

Java组件项目中的JavaFX对话框国际化

如何在SWT菜单项文本中保留@字符

如何设计包含已知和未知键值对映射的Java类?

Kotlin-仅替换字符串中最后一个给定的字符串

在Java中比较同一多维数组的两个不同的字符串元素

从字节数组切换到JakartaMail org.springframework.mail.javamail.JavaMailSender InputStreamResource