我通过这样做得到我的 ARGB_8888 位图的像素数据:
public void getImagePixels(byte[] pixels, Bitmap image) {
// calculate how many bytes our image consists of
int bytes = image.getByteCount();
ByteBuffer buffer = ByteBuffer.allocate(bytes); // Create a new buffer
image.copyPixelsToBuffer(buffer); // Move the byte data to the buffer
pixels = buffer.array(); // Get the underlying array containing the data.
}
但是,我想将每个像素存储在四个字节 (ARGB) 上的数据转换为每个像素存储在 3 个字节上的位置 ( BGR )。
任何帮助表示赞赏!
最佳答案
免责声明:使用 Android Bitmap API 可能有更好/更简单/更快的方法来做到这一点,但我不熟悉它。如果你想沿着你开始的方向走,这里是你的代码修改后将 4 字节 ARGB 转换为 3 字节 BGR
public byte[] getImagePixels(Bitmap image) {
// calculate how many bytes our image consists of
int bytes = image.getByteCount();
ByteBuffer buffer = ByteBuffer.allocate(bytes); // Create a new buffer
image.copyPixelsToBuffer(buffer); // Move the byte data to the buffer
byte[] temp = buffer.array(); // Get the underlying array containing the data.
byte[] pixels = new byte[(temp.length / 4) * 3]; // Allocate for 3 byte BGR
// Copy pixels into place
for (int i = 0; i < (temp.length / 4); i++) {
pixels[i * 3] = temp[i * 4 + 3]; // B
pixels[i * 3 + 1] = temp[i * 4 + 2]; // G
pixels[i * 3 + 2] = temp[i * 4 + 1]; // R
// Alpha is discarded
}
return pixels;
}
关于java - Android- 将 ARGB_8888 位图转换为 3BYTE_BGR,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18086568/