github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/image/ycbcr.go (about) 1 // Copyright 2011 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package image 6 7 import ( 8 "github.com/shogo82148/std/image/color" 9 ) 10 11 // YCbCrSubsampleRatioは、YCbCr画像で使用されるクロマサブサンプル比率です。 12 type YCbCrSubsampleRatio int 13 14 const ( 15 YCbCrSubsampleRatio444 YCbCrSubsampleRatio = iota 16 YCbCrSubsampleRatio422 17 YCbCrSubsampleRatio420 18 YCbCrSubsampleRatio440 19 YCbCrSubsampleRatio411 20 YCbCrSubsampleRatio410 21 ) 22 23 func (s YCbCrSubsampleRatio) String() string 24 25 // YCbCrは、Y'CbCr色のインメモリイメージです。ピクセルごとに1つのYサンプルがありますが、 26 // 各CbおよびCrサンプルは1つ以上のピクセルに跨ることができます。 27 // YStrideは、垂直方向の隣接ピクセル間のYスライスインデックスデルタです。 28 // CStrideは、別々のクロマサンプルにマップされる垂直方向の隣接ピクセル間のCbおよびCrスライスインデックスデルタです。 29 // 絶対的な要件ではありませんが、通常、YStrideとlen(Y)は8の倍数です、そして: 30 // 31 // 4:4:4の場合、CStride == YStride/1 && len(Cb) == len(Cr) == len(Y)/1。 32 // 4:2:2の場合、CStride == YStride/2 && len(Cb) == len(Cr) == len(Y)/2。 33 // 4:2:0の場合、CStride == YStride/2 && len(Cb) == len(Cr) == len(Y)/4。 34 // 4:4:0の場合、CStride == YStride/1 && len(Cb) == len(Cr) == len(Y)/2。 35 // 4:1:1の場合、CStride == YStride/4 && len(Cb) == len(Cr) == len(Y)/4。 36 // 4:1:0の場合、CStride == YStride/4 && len(Cb) == len(Cr) == len(Y)/8。 37 type YCbCr struct { 38 Y, Cb, Cr []uint8 39 YStride int 40 CStride int 41 SubsampleRatio YCbCrSubsampleRatio 42 Rect Rectangle 43 } 44 45 func (p *YCbCr) ColorModel() color.Model 46 47 func (p *YCbCr) Bounds() Rectangle 48 49 func (p *YCbCr) At(x, y int) color.Color 50 51 func (p *YCbCr) RGBA64At(x, y int) color.RGBA64 52 53 func (p *YCbCr) YCbCrAt(x, y int) color.YCbCr 54 55 // YOffsetは、(x, y)のピクセルに対応するYの最初の要素のインデックスを返します。 56 func (p *YCbCr) YOffset(x, y int) int 57 58 // COffsetは、(x, y)のピクセルに対応するCbまたはCrの最初の要素のインデックスを返します。 59 func (p *YCbCr) COffset(x, y int) int 60 61 // SubImageは、rを通じて見える画像pの一部を表す画像を返します。 62 // 返される値は、元の画像とピクセルを共有します。 63 func (p *YCbCr) SubImage(r Rectangle) Image 64 65 func (p *YCbCr) Opaque() bool 66 67 // NewYCbCrは、指定された境界とサブサンプル比率を持つ新しいYCbCrイメージを返します。 68 func NewYCbCr(r Rectangle, subsampleRatio YCbCrSubsampleRatio) *YCbCr 69 70 // NYCbCrAは、非アルファ乗算のY'CbCr-with-alpha色のインメモリイメージです。 71 // AとAStrideは、埋め込まれたYCbCrのYとYStrideフィールドに対応します。 72 type NYCbCrA struct { 73 YCbCr 74 A []uint8 75 AStride int 76 } 77 78 func (p *NYCbCrA) ColorModel() color.Model 79 80 func (p *NYCbCrA) At(x, y int) color.Color 81 82 func (p *NYCbCrA) RGBA64At(x, y int) color.RGBA64 83 84 func (p *NYCbCrA) NYCbCrAAt(x, y int) color.NYCbCrA 85 86 // AOffsetは、(x, y)のピクセルに対応するAの最初の要素のインデックスを返します。 87 func (p *NYCbCrA) AOffset(x, y int) int 88 89 // SubImageは、rを通じて見える画像pの一部を表す画像を返します。 90 // 返される値は、元の画像とピクセルを共有します。 91 func (p *NYCbCrA) SubImage(r Rectangle) Image 92 93 // Opaqueは、画像全体をスキャンし、それが完全に不透明であるかどうかを報告します。 94 func (p *NYCbCrA) Opaque() bool 95 96 // NewNYCbCrAは、指定された境界とサブサンプル比率を持つ新しい [NYCbCrA] イメージを返します。 97 func NewNYCbCrA(r Rectangle, subsampleRatio YCbCrSubsampleRatio) *NYCbCrA