在嘗試閱讀像素資料時,我偶然發現PixelInterleavedSampleModel并使用此鏈接獲取更多資訊。然而,檔案中的術語Pixel Stride、Scanline Stride和bandoffsets讓我感到困惑。特別是以下細節讓我感到困惑:
像素步幅是同一掃描線上同一波段的兩個樣本之間的資料陣列元素的數量。掃描線步幅是給定樣本與下一條掃描線同一列中的相應樣本之間的資料陣列元素的數量。帶偏移量表示從保存每個帶的 DataBuffer 組的第一個資料陣列元素到帶的第一個樣本的資料陣列元素的數量。波段從 0 到 N-1 編號。存盤體索引表示資料緩沖器的存盤體和影像資料的帶之間的對應關系。
誰能用示例資料給我一個簡單的解釋,以便我可以看到我們如何可視化 ARGB 資料?還請使用示例資料解釋術語像素步幅和掃描線步幅和帶偏移。
uj5u.com熱心網友回復:
我會試一試......但首先是一些有用的“定義”:
- “交錯”像素意味著每個像素的樣本一起存盤在單個陣列中,例如,
R0 G0 B0 R1 G1 B1 ... Rn Gn Bn - ...與“平面”像素相反,其中一個組件的所有樣本都存盤在一起,例如
R0 R1 ... Rn, G0 G1 ... Gn, B0 B1 ... Bn - “掃描線”是影像中的一行或一行像素
這個答案僅與交錯的情況和PixelInterleavedSampleModel.
像素步幅是同一掃描線上同一波段的兩個樣本之間的資料陣列元素的數量。
給定一條由 RGB 三元組組成的掃描線(像素陣列):
R0 G0 B0 R1 G1 B1 R2 G2 B2 R3 G3 B3 ... Rn Gn Bn
|<-- -->|
...像素步幅或“同一波段的兩個樣本之間的資料陣列元素數”(在圖中,從 R1 到 R2 的元素數)很簡單3。類似地,對于單波段灰度樣本,像素步幅為 1,對于交錯 RGBA,像素步幅為 4。
掃描線步幅是給定樣本與下一條掃描線同一列中的相應樣本之間的資料陣列元素的數量。
同樣,給定一條由 320 個 RGB 三元組組成的掃描線:
R0 G0 B0 R1 G1 B1 R2 G2 B2 R3 G3 B3 ... R319 G319 B319 R320 B320 G320 ... Rn Gn Bn
|<-- scan line stride -->|
...掃描線的步幅只是960, 或 3(像素步幅)乘以 320(行中的像素數)。
有時資料陣列在每行的末尾包含填充。這是一個示例,其中掃描線由 320 個 RGB 三元組組成,但資料陣列中的每一行都填充為 100 的倍數,即 40 個填充樣本:
R0 G0 B0 R1 G1 B1 ... R319 G319 B319 ... x0 ... x39 R320 B320 G320 ... Rn Gn Bn X0 ... X39
|<-- scan line stride -->|
...掃描線步幅現在是1000。
帶偏移量表示從保存每個帶的 DataBuffer 組的第一個資料陣列元素到帶的第一個樣本的資料陣列元素的數量。波段從 0 到 N-1 編號。存盤體索引表示資料緩沖器的存盤體和影像資料的帶之間的對應關系。
給定由 RGB 三元組組成的同一條掃描線:
R0 G0 B0 R1 G1 B1 R2 G2 B2 R3 G3 B3 ... Rn Gn Bn
0 1 2
...波段偏移將分別0, 1, 2用于 R、G 和 B。
另一種可能性是由 ARGB 四邊形組成的掃描線,按 ABGR 順序:
A0 B0 G0 R0 A1 B1 G1 R1 ... An Bn Gn Rn
0 1 2 3
...波段偏移將分別3, 2, 1, 0用于 R、G、B 和 A(偏移陣列中的波段順序遵循顏色模型的順序,最后是任何 alpha 樣本)。
通常就是這么簡單。
如果您想創建一個由唯一的綠色樣本或陣列的子區域組成的影像,那么當這些值變得更有趣時(它們將是相同的,因為它們描述了記憶體中的“物理”資料布局,但它們將不同于光柵/影像)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/494700.html
