翻转存储为字节数组的图像

时间:2017-01-09 16:49:54

标签: java arrays image byte

我有一个存储为byte []数组的图像,我想在将字节写入其他地方的磁盘之前垂直翻转图像。

图像字节来自压缩的jp2图像文件。我已经研究过像Flip image stored as a byte[] array这样的实现,但是我没有在android中工作,也没有访问BitmapFactory。我还考虑首先将字节数组转换为BufferedImage,然后翻转它,但是在当前上下文中不知道图像的高度和宽度(编辑:我修改了代码,因此高度和宽度都是现在已知)。

有没有办法通过严格的数组操作来做到这一点?

编辑:尝试翻转代码

 public static byte[] flip(byte[] imageBytes) {
    //separate out the sub arrays
    byte[] holder = new byte[imageBytes.length];
    byte[] subArray = new byte[dimWidth];//dimWidth is the image width, or number of matrix columns
    int subCount = 0;
    for (int i = 0; i < imageBytes.length; i++) {
        subArray[subCount] = imageBytes[i];
        subCount++;
        if (i% dimWidth == 0) {
            subArray = reverse(subArray);
            if (i == (dimWidth)) {
                holder = subArray;
            } else {
                holder = concat(holder, subArray);
            }
            subCount = 0;
            subArray = new byte[dimWidth];
        }
    }
    subArray = new byte[dimWidth];
    System.arraycopy(imageBytes, imageBytes.length - dimWidth, subArray, 0, subArray.length);
    holder = concat(holder, subArray);
    imageBytes = holder;
    return imageBytes;
}

2 个答案:

答案 0 :(得分:1)

没关系,我让它运转起来。我只需要在将它们交错到最终数组之前翻转高低字节。对于任何与我有同样问题的人,在交错之前,分别在高字节和低字节数组上使用上述翻转函数。

感谢您的帮助!

答案 1 :(得分:0)

  

我还研究过将字节数组转换为BufferedImage   首先,然后翻转它,但图像的高度宽度不是   在当前背景下已知。

你可以检查身高和身高。宽度直接来自 JP2 文件字节的标题部分。

getIntent()