7

我有一个存储为 byte[] 数组的图像,我想在将其发送到其他地方处理之前翻转图像(作为 byte[] 数组)。

我四处搜索,如果不操作 byte[] 数组中的每一位,就找不到简单的解决方案。

如何将字节数组 [] 转换为某种图像类型,使用现有的翻转方法对其进行翻转,然后将其转换回字节 [] 数组?

有什么建议吗?

干杯!

4

2 回答 2

10

字节数组到位图:

Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);

使用它通过提供直角 (180) 来旋转图像:

public Bitmap rotateImage(int angle, Bitmap bitmapSrc) {
    Matrix matrix = new Matrix();
    matrix.postRotate(angle);
    return Bitmap.createBitmap(bitmapSrc, 0, 0, 
        bitmapSrc.getWidth(), bitmapSrc.getHeight(), matrix, true);
}

然后回到数组​​:

ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] flippedImageByteArray = stream.toByteArray();
于 2013-06-05T22:33:40.013 回答
0

以下是用于翻转存储为字节数组的图像并以字节数组返回结果的方法。

private byte[] flipImage(byte[] data, int flip) {
    Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
    Matrix matrix = new Matrix();
    switch (flip){
        case 1: matrix.preScale(1.0f, -1.0f); break; //flip vertical
        case 2: matrix.preScale(-1.0f, 1.0f); break; //flip horizontal
        default: matrix.preScale(1.0f, 1.0f); //No flip
    }

    Bitmap bmp2 = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, true);
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bmp2.compress(Bitmap.CompressFormat.JPEG, 100, stream);
    return stream.toByteArray();
}

如果你想要一个垂直翻转的图像,那么传递 1 作为翻转值,水平翻转传递 2。

例如:

@Override
public void onPictureTaken(byte[] data, Camera camera) {
   byte[] verticalFlippedImage = flipImage(data,1);
   byte[] horizontalFlippedImage = flipImage(data,2);
}
于 2021-04-01T14:09:35.413 回答