Swift實現 Z字型編排

    JPEG是一種常見的圖像文件格式,也是目前靜態圖像中壓縮比最高的一種圖文格式。通常在JPEG編碼過程中有一個非常重要的步驟,就是Z字型編排過程:經過前期處理的圖像被分爲若干個8*8的小圖像塊,此時就從小圖像塊的左上角開始沿Z字型對圖像元素進行遍歷,並將結果重新寫入到等大小的圖像塊中。
原始圖像矩陣序號如下:

1.png

經過Z字型編排,過程如下圖:

2.png

Z字型編排就是對原始矩陣進序號行重新排列,從矩陣的0處開始,每過一個格子,將此時的步數記錄下來,經過排列後的原圖像矩陣中的序號爲:

23-19-14.png

規律:

  1. 當row = 0 或者 row = 7,且j爲偶數時,向右側移動一個格子。
  2. 當column = 0 或者 column = 7 且i爲奇數時,向下移動一個格子。
  3. 當 row + column 爲奇數時向左下角移動一個格子。
  4. 當 row + column 爲偶數時向右上角移動一個格子。

Swift程序如下:

//-----------------------數據初始化-----------------------
var originArr: [[Int]] = []
var zigArr: [[Int]] = Array.init(repeating: 
                            Array.init(repeating: 0, count: 8), count: 8)
let SIZE: Int = 8
for row in 0..<SIZE {
  var t: [Int] = []
  for column in 0..<SIZE {
    t.append(row * SIZE + column)
   }
  originArr.append(t)
}
//-----------------------算法開始-----------------------
var i:Int = 0 , j: Int = 0
for row in 0..<SIZE {
  for column in 0..<SIZE {
    zigArr[i][j] = originArr[row][column]

      if(i == 0 || i == SIZE - 1) && (j % 2 == 0) {
        j += 1
        continue
      }

      if(j == 0 || j == SIZE - 1) && (i % 2 == 1 ) {
        i += 1
        continue
      }

      if (i + j) % 2 == 1 {
        i += 1
        j -= 1
        continue
      } else if (i + j) % 2 == 0 {
        i -= 1
        j += 1
        continue
      }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章