翻转存储为byte []数组的图像

时间:2013-06-05 22:28:25

标签: java android image bytearray flip

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

我已经搜索过,在没有操作byte []数组中的每个位的情况下找不到简单的解决方案。

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

有什么建议吗?

干杯!

2 个答案:

答案 0 :(得分:9)

字节数组到位图:

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();

答案 1 :(得分: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);
}